圖的遍歷:兩種遍歷,輸出在每個連通分量外加上括號惩妇,簡單跃巡。
代碼:
#include<stdio.h>
#include<stdlib.h>
int a[10][10],ne,nv;
int visited[10];
void DFS(int a[10][10],int v)
{
visited[v]=1;
printf("%d ",v);
for (int i=0;i<nv;i++){
if(!visited[i]&&a[v][i]==1){
DFS(a,i);
}
}
}
void DFST(int a[10][10])
{
for (int i=0;i<nv;i++){
visited[i]=0;
}
for (int v=0;v<nv;v++){
if(!visited[v]){
printf("{ ");
DFS(a,v);
printf("}\n");
}
}
}
int queue[10],top=0,base=0;
void BFST(int a[10][10])
{
for (int i=0;i<nv;i++){
visited[i]=0;
}
for (int v=0;v<nv;v++){
if(!visited[v]){
printf("{ ");
visited[v]=1;
printf("%d ",v);
queue[top]=v;
top++;
while(top>=base+1){
int w=queue[base++];
for (int i=0;i<nv;i++){
if(a[w][i]==1&&visited[i]==0){
visited[i]=1;
queue[top++]=i;
printf("%d ",i);
}
}
}
printf("}\n");
}
}
}
int main()
{
scanf("%d%d",&nv,&ne);
for (int i=0;i<ne;i++)
{
int x,y;
scanf("%d%d",&x,&y);
a[x][y]=a[y][x]=1;
}
DFST(a);
BFST(a);
}