图的深度优先搜索算法
引言
图是学习算法时必不可少的一部分,在算法中有着相当的重要性,在图的搜索算法中有两种基本的搜索算法,一种是图的深度优先算法,另一种是图的广度优先搜索算法。下面贴出图的深度优先搜索算法。
c++代码:
viod DFS(Graph G,int v)
{
cout<<GetValue(v)<<' ';//访问定点v
visited[v]=1; //定点v作访问标记
int w=GetFirstNeighbor(v);//取v的第一个临界定点w
while(w!=-1) //若邻接定点w存在
{
if(!visited[w]) DFS(G,w); //若定点w未访问过,递归访问定点w
w=GetNextNeighbor(v,w); //取定点v的排在w的后面的下一个邻接定点
}
}
完整代码如下
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int visit[7]={0};
int a[7][7]={{0,0,0,0,1,0,0},
{0,0,1,0,0,0,1},
{0,1,0,1,1,0,1},
{0,0,1,0,1,0,1},
{1,0,1,1,0,1,0},
{0,0,0,0,1,0,1},
{0,1,1,1,0,1,0}
};
int getfirst(int k)
{
int i;
for(i=0;i<7;i++)
{
if(a[k][i]!=0)
break;
}
if(i==7)
return -1;
else
return i;
}
int getnext(int i,int j)
{
int k;
for(k=j+1;k<7;k++)
{
if(a[i][k]==1)
break;
}
if(k==7)
return -1;
else
return k;
}
void DFS(int k)
{
int w;
printf("%d ",k+1);
visit[k]=1;
w=getfirst(k);
while(w!=-1)
{
if(visit[w]==0)
{
printf(" ");
DFS(w);
}
w=getnext(k,w);
}
}
int main()
{
DFS(0);
return 0;
}