sdut 2141
1 #include<stdio.h> 2 #include<string.h> 3 int mapp[110][110],vis[110],que[110],flag; 4 int k,m,t; 5 void bfs(int t) 6 { 7 int l=0,r=0,tt,j; 8 que[r++]=t; 9 while(l<r) 10 { 11 tt=que[l++]; 12 if(flag==1) 13 { 14 flag=0; 15 printf("%d",tt); 16 17 } 18 else 19 printf(" %d",tt); 20 for(j=0;j<k;j++) 21 { 22 if(!vis[j]&&mapp[tt][j]) //找到一个与tt相连的点并进栈。 23 { 24 que[r++]=j; 25 vis[j]=1; 26 } 27 } 28 29 } 30 } 31 int main () 32 { 33 int n,i,a,b; 34 scanf("%d",&n); 35 while(n--) 36 { 37 memset(vis,0,sizeof(vis)); 38 memset(mapp,0,sizeof(mapp)); 39 scanf("%d %d %d",&k,&m,&t);//k个顶点,m条边,t为遍历的初始点顶点。 40 for(i=0;i<m;i++) 41 { 42 scanf("%d %d",&a,&b); 43 mapp[a][b]=mapp[b][a]=1; 44 } 45 flag=1; //控制是否输出空格。 46 vis[t]=1; 47 bfs(t); 48 printf("\n"); 49 } 50 return 0; 51 }
宽度搜索是采用队列的形式,队首出队,将与队首相邻的点进队。
深度搜索是递归的过程,