首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

数据结构 图的深度优先搜索有关问题 求高人指教

2012-04-09 
数据结构 图的深度优先搜索问题 求高人指教运行后要求我不断输入一直输入输了几十次还让输就是不运行找了

数据结构 图的深度优先搜索问题 求高人指教
运行后要求我不断输入 一直输入 输了几十次还让输 就是不运行 找了很久不知错误在哪,求高人指教......

下面是源代码:





#include <stdio.h>

#define INFINITY 0  
#define MAX_VERTEX_NUM 20
#define OK true
#define FALSE false

typedef bool Status;
bool visited[MAX_VERTEX_NUM];
Status (*VisitFunc)(int v);


typedef struct ArcCell
{
  int adj;//权重
}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];

typedef struct
{
  int vexs[MAX_VERTEX_NUM];//顶点向量
  AdjMatrix arcs;//邻接矩阵
  int vexnum,arcnum;//顶点数和弧数

}MGraph;

Status PrintElem(int v)
{
  printf("%d ",v);
  return OK;
}

Status CreateUDN(MGraph &G)//创建图
{ int i,j,k; int v1,v2,w;
  scanf("%d%d",&G.vexnum,&G.arcnum);
  for(i=0;i<G.vexnum;i++) scanf("%d",&G.vexs[i]);
  for(i=0;i<G.vexnum;i++)
  for(j=0;j<G.vexnum;j++) G.arcs[i][j].adj=INFINITY;
  for(k=0;k<G.arcnum;k++)
  {
  scanf("%d%d%d",&v1,&v2,&w);
  G.arcs[v1][v2].adj=w;
  G.arcs[v2][v1].adj=w;
  }
  return OK;
}

int NextAdjVex(MGraph G,int v,int w)//下一个顶点
{
  int i;int w1,vector;w1=vector=0;
  for(i=0;i<G.vexnum;i++)
  {
  if(G.arcs[v][i].adj>vector&&visited[i]==FALSE)
  {
  w1=i;
  vector=G.arcs[v][i].adj;
  }
  }
  if(vector==0) return 0;
  return w1;
}


void DFS(MGraph G,int v)
{ int w;
  visited[v]=OK; VisitFunc(v);
  for(w=v;w>=0;w=NextAdjVex(G,v,w))
  {
  if(!visited[w]) DFS(G,w);
  }
}

void DFSTraverse(MGraph G,Status (*Visit)(int))
{
  int v;
  VisitFunc=Visit;
  for(v=0;v<G.vexnum;++v) visited[v]=FALSE;
  for(v=0;v<G.vexnum;++v) if(!visited[v]) DFS(G,v);
}

int main()
{
  Status (*Visit)(int e);
  Visit=&PrintElem;
  MGraph G;
  CreateUDN(G);
  DFSTraverse(G,Visit);
  return 0;
}


[解决办法]
LZ你的程序是可以运行的,不过建议你下次再写的是时候还是加上提示信息,在程序运行过程中可以掌握运行情况,而且程序出错的位置也可以很明显看出来。不过程序中还是有点问题,给你我的博客地址,可以交流学习下。
http://blog.csdn.net/furney

热点排行