深度優先生成樹
阿新 • • 發佈:2018-12-12
歡迎使用Markdown編輯器
Problem Description
設有一連通無向圖,其頂點值為字元型並假設各值互不相等,採用鄰接矩陣表示法儲存表示。利用DFS演算法求其深度優先生成樹(從下標0的頂點開始遍歷),並在遍歷過程中輸出深度優先生成樹的每一條邊。
Input
有多組測試資料,每組資料的第一行為兩個整數n和e,表示n個頂點和e條邊(0<n<20);第二行為其n個頂點的值,按輸入順序進行儲存;後面有e行,表示e條邊的資訊,每條邊資訊佔一行,包括邊所依附的頂點下標i和j,資料之間用空格隔開。
Output
輸出深度優先生成樹的每一條邊,每條邊資訊之後均有一空格,每組輸出佔一行,具體格式見樣例。
Sample Input
4 4
ABCD
0 1
0 3
1 2
1 3
Sample Output
(A,B) (B,C) (B,D)
#include<iostream> using namespace std; int visit[100]; void DNF(char ver[],int arc[][100],int n,int v) { visit[v]=1; for( int j=0;j<n;j++) { if(visit[j]==0 && arc[v][j]==1) { cout<<"("<<ver[v]<<","<<ver[j]<<") "; DNF(ver,arc,n,j); } } } int main() { int n,e,i,j,k,arc[100][100]; char ver[100]; while(cin>>n>>e>>ver) { for(i=0;i<n;i++) { for(j=0;j<n;j++) { arc[i][j]=0; } visit[i]=0; } for(k=0;k<e;k++) { cin>>i>>j; arc[i][j]=arc[j][i]=1; } DNF(ver,arc,n,0); cout<<endl; } return 0; }