西南科技大学OJ题 图的按录入顺序深度优先搜索1068
生活随笔
收集整理的這篇文章主要介紹了
西南科技大学OJ题 图的按录入顺序深度优先搜索1068
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
圖的按錄入順序深度優先搜索
?5000(ms)
?10000(kb)
?2295?/?4163
Tags:?深度優先
圖的深度優先搜索類似于樹的先根遍歷,即從某個結點開始,先訪問該結點,然后深度訪問該結點的第一棵子樹,依次為第二頂子樹。如此進行下去,直到所有的結點都訪問為止。在該題中,假定所有的結點以“A”至“Z”中的若干字符表示,且要求結點的訪問順序根據錄入的順序進行訪問。如果結點錄入的順序為HUEAK,從H開始進行深度優先搜索,則可能的搜索結果為:H->A->K->U>E.
輸入
第一行為一個整數n,表示頂點的個數,第二行為n個大寫字母構成的字符串,表示頂點,接下來是為一個n*n大小的整數矩陣,表示圖的鄰接關系。數字為0表示不鄰接,否則為相應的邊的長度。最后一行為一個字符,表示要求進行深度優先搜索的起始頂點。輸出
用一行輸出深度優先搜索結果,起始點為給定的頂點。樣例輸入
5 HUEAK 0 0 2 3 0 0 0 0 7 4 2 0 0 0 0 3 7 0 0 1 0 4 0 1 0 H樣例輸出
HEAUK #include<stdio.h> void CreateMap(int edges[100][100],int n)//創建鄰接矩陣 {for(int i=0;i<n;i++) for(int j=0;j<n;j++) scanf("%d",&edges[i][j]); } void DFS(int i,int a[],char str[],int edges[100][100],int n)//深度優先搜索 {if(a[i]==0)//改點為被標記時 {printf("%c",str[i]);//輸出對應的符號,并且標記 a[i]=1;for(int j=0;j<n;j++)//深度遞歸,遞歸結束后再j+1;然后再遞歸 {if(edges[i][j]!=0)DFS(j,a,str,edges,n);}} } int main() {int edges[100][100];int n;char str[100];scanf("%d",&n);scanf("%s",str);CreateMap(edges,n);char data;getchar();//抵消回車字符 scanf("%c",&data);for(int i=0;i<n;i++){if(str[i]==data)//找到該字符對應的行 {int a[100]={0};//初始化標記 DFS(i,a,str,edges,n);break;}} }?
總結
以上是生活随笔為你收集整理的西南科技大学OJ题 图的按录入顺序深度优先搜索1068的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用python将图片写入ppt_用pyt
- 下一篇: fluidsim win7版本_Flui