dfs遍历,(依次输出遍历顶点):
用邻接矩阵存图(用一个二维数组把图存起来)!
<span style="font-size:18px;">#include<stdio.h>
#define MAX 9999999//当顶点之间不相通时,标记为一个很大的数
int sum=0;//记录遍历的顶点的个数
int v,s;//顶点数和边数
int book[50]={0},p[30][30];//标记数组和矩阵
void dfs(int k)
{
printf("%d ",k);//打印顶点
if(sum==v)//如果已遍历的顶点数等于总顶点数,则退出
return ;
for(int count=1;count<=v;count++)//对所有的顶点进行遍历,看哪一个和这个顶点有关系
{
sum++;
if(book[count]==0&&p[k][count]==1)//既没有被访问过,而且和当前顶点还有关系
{
book[count]=1;//把此顶点进行标记
dfs(count);//接着对下一个顶点进行深度搜索
}
}
}
int main(void)
{
int x,y;
scanf("%d%d",&v,&s);//输入顶点和边数
for(int i=1;i<=v;i++)
for(int j=1;j<=v;j++)
{
p[i][i]=0;//顶点自己到自己设置为0
p[i][j]=MAX;//其余的暂且都设置为最大值
}
for(int k=1;k<=s;k++)//输入边数
{
scanf("%d%d",&x,&y);
p[x][y]=1;//因为是无向图,所以如果x到y有通路,那么y到x也有通路
p[y][x]=1;
}
book[1]=1;//把第一个顶点标记为已访问
dfs(1);//从第一个顶点开始深搜
return 0;
}</span>图的bfs遍历:
<span style="font-size:18px;">#include<stdio.h>
#define MAX 9999999//此处只是相对的最大值
int main(void)
{
int queue[50];//必须保证能存放所有的顶点
int book[50]={0};//标记数组
int p[50][50];
int v,s,head=1,tail=1,a,b;//把头尾指针初始化为 1
scanf("%d%d",&v,&s);
for(int i=1;i<=v;i++)//存图的矩阵是一个正方形
for(int j=1;j<=v;j++)
{
p[i][i]=0;//主对角线都是0,因为是自身到自身
p[i][j]=MAX;
}
for(int k=1;k<=s;k++)
{
scanf("%d%d",&a,&b);
p[a][b]=1;
p[b][a]=1;
}
queue[tail]=1;//第一个顶点入队
book[1]=1;
tail++;
while(head<tail)
{
for(int k=1;k<=v;k++)
{
if(book[k]==0&&p[queue[head]][k]==1)//既没有被标记,又和当前顶点有关系
{
queue[tail]=k;//当前顶点入队
book[k]=1;
tail++;
}
}
head++;
}
for(int k=1;k<tail;k++)//注意;虽然是出队,但是并没有删除,只是指针向后移,而暂且用不到前面的数据,所以前面的数据仍然可以输出
{
printf("%d ",queue[k]);
}
printf("\n");
return 0;
}</span>原文地址:http://blog.csdn.net/u013240038/article/details/45174395