#include<stdio.h>
/*深度优先搜索算法
完成时间:2015-7-16*/
#define max 100
typedef struct Graph//邻接矩阵表示图
{
int edge[max][max];
int n;//顶点数
int e;//边的数量
}Graph;
bool visited[max];
void creatG(Graph G)
{
int i,j;
int s,t;
int v;
for(i=0;i<G.n;i++)
{
for(j=0;i<G.n;j++)
{
G.edge[i][j]=0;//边初始化为0
}
visited[i]=false;//初始化全部为未遍历
}
printf("请输入边如:结点1和结点2相连,权重为3,则输入1 2 3\n");
for(i=0;i<G.e;i++)
{
scanf("%d%d%d",&s,&t,&v);//输入边的相关信息:s t 相连的两节点,v为权值
G.edge[s][t]=v;
}
// MGraph.
}
void DFS(Graph G,int v)
{
int i;
printf("%d ",v);
visited[v]=true;
for(i=0;i<G.n;i++)
{
if(G.edge[v][i]!=0&&visited[i]==false)
{
DFS(G,i);
}
}
}
void main ()
{
int n,e;
Graph G;
printf("please input 节点数n和边数e\n");
scanf("%d %d",&n,&e);
G.n=n;//初始化
G.e=e;//初始化
creatG(G);//创建图
printf("\n深度优先搜索结果为:");
DFS(G,1);//深度优先搜索,从结点1开始搜索。
printf("\n");
}
/*深度优先搜索算法
完成时间:2015-7-16*/
#define max 100
typedef struct Graph//邻接矩阵表示图
{
int edge[max][max];
int n;//顶点数
int e;//边的数量
}Graph;
bool visited[max];
void creatG(Graph G)
{
int i,j;
int s,t;
int v;
for(i=0;i<G.n;i++)
{
for(j=0;i<G.n;j++)
{
G.edge[i][j]=0;//边初始化为0
}
visited[i]=false;//初始化全部为未遍历
}
printf("请输入边如:结点1和结点2相连,权重为3,则输入1 2 3\n");
for(i=0;i<G.e;i++)
{
scanf("%d%d%d",&s,&t,&v);//输入边的相关信息:s t 相连的两节点,v为权值
G.edge[s][t]=v;
}
// MGraph.
}
void DFS(Graph G,int v)
{
int i;
printf("%d ",v);
visited[v]=true;
for(i=0;i<G.n;i++)
{
if(G.edge[v][i]!=0&&visited[i]==false)
{
DFS(G,i);
}
}
}
void main ()
{
int n,e;
Graph G;
printf("please input 节点数n和边数e\n");
scanf("%d %d",&n,&e);
G.n=n;//初始化
G.e=e;//初始化
creatG(G);//创建图
printf("\n深度优先搜索结果为:");
DFS(G,1);//深度优先搜索,从结点1开始搜索。
printf("\n");
}