| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1339 人关注过本帖
标题:图的深度优先遍历序列
只看楼主 加入收藏
xuyuke
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2007-4-1
收藏
 问题点数:0 回复次数:1 
图的深度优先遍历序列

#include <stdio.h>
#include <iostream.h>
#define INT_MAX 100
#define INFINITY INT_MAX // 最大值∞
#define MAX_VERTEX_NUM 20
typedef struct ArcCell
{
int adj; // VRType是顶点关系类型,对无权图,用1//或0表示相邻否;对带权图,则为权值类型
int *info; // 该弧相关信息的指针
} ArcCell, AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct MGraph
{
int vexs[MAX_VERTEX_NUM]; // 顶点向量
AdjMatrix arcs; // 邻接矩阵
int vexnum, arcnum; // 图的当前顶点数和弧(边)数
char kind; // 图的种类标志
}MGraph;
int LocateVex(MGraph &G, char &v)
{
int i;
for(i=0; i<G.vexnum; i++)
if(G.vexs[i]==v) return i;
return 0;
} // 最大顶点个数
int CreateUDG(MGraph &G) //创建无向网的邻接矩阵
{
int i, j, k, IncInfo;
char v1, v2, V;
printf("input the number for vexnum and arcnum:");
scanf("%d,%d", &G.vexnum, &G.arcnum); // IncInfo=0表示各弧不含其他信息
V=getchar(); //为了滤掉前面输入的空格符,后面亦同此原因
printf("input %d char for vexs \n",G.vexnum);
for(i=0; i<G.vexnum; ++i) //输入网中所有顶点
{
G.vexs[i]=getchar();
V=getchar();
}
for(i=0; i<G.vexnum; ++i) //初始化邻接矩阵
for(j=0; j<G.vexnum; ++j)
{
G.arcs[i][j].adj= 0 ;
G.arcs[i][j].info = NULL;
}
printf("input %d arc <char,char> \n", G.arcnum);
for(k=0; k<G.arcnum; k++)
{
printf("%d:\n",k);
scanf("%c,%c", &v1,&v2); //输入一条弧的两个顶点
V=getchar();
V=V;
i=LocateVex(G,v1);
j=LocateVex(G,v2);
if(i!=100 && j!=100)
{
G.arcs[j][i].adj = G.arcs[i][j].adj=1;
} //if
} //for
return 1;
}
void (* VisitFunc)(int v);
void DFSTraverse(MGraph G, void (*Visit)(int v))
{ // 对图G作深度优先遍历。
int v
VisitFunc = Visit;
for (v=0; v<G.vexnum; ++v)
visited[v] = 0; // 访问标志数组初始化
for (v=0; v<G.vexnum; ++v)
if (!visited[v]) DFS(G, v); // 对尚未访问的顶点调用DFS
}
void DFS (MGraph G, int v)
{
int w; // 从第v个顶点出发递归地深度优先遍历图G。
visited[v] = 1; VisitFunc(G,v); // 访问第v个顶点
for (w=FirstAdjVex(G, v); w!=-1; w=NextAdjVex(G, v, w) )
if (!visited[w]) DFS(G, w);
// 对v的尚未访问的邻接顶点w递归调用DFS
}
int FirstAdjVex(MGraph G, int v)
{
int k,f;
f=-1;
for (k=G.vexnum-1;k>=0;--k)
if(G.arcs[v][k].adj!=0)f=k;
return f;
}
int NextAdjVex(MGraph G, int v,int w)
{
int k,f;
f=-1;
for (k=w+1;k>=0;--k)
if(G.arcs[v][k].adj!=0)f=k;
return f;
}
main()
{
int i,Visited[1000];
MGraph G;
CreateUDG(G);
for(i=0;i<G.vexnum;i++)
{
for(int j=0;j<G.arcnum-1;j++)
{
printf("%d ",G.arcs[i][j].adj);
}
printf("\n");
}
printf("\n\n 二、深度遍历:\n");
for(i=1;i<= G.vexnum;i++)
Visited[i] = 0;
for(i = 1;i <= G.arcnum-1;i++)
if(Visited[i] == 0);
// DFS(G,i,Visited);
}



这个我做的代码。有很多错误,找不出,哪位高手帮帮小弟啊。

搜索更多相关主题的帖子: 遍历 序列 深度 MAX INT 
2007-04-24 08:50
xxfeng_0512
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-4-26
收藏
得分:0 

怎么没人回帖呢?
我顶一下
谢谢你们无私的发贴
给我们初学者提供帮助
再一次谢谢楼主@!!!


2007-05-14 21:59
快速回复:图的深度优先遍历序列
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012288 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved