| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1077 人关注过本帖
标题:[求助]帮忙看下,哪里出了错
取消只看楼主 加入收藏
wangxmin
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2005-11-24
收藏
 问题点数:0 回复次数:1 
[求助]帮忙看下,哪里出了错

#include "iostream.h"

#define MaxVerNum 100 //最大顶点数设为100

int Gtype=0; //图储存类型(0:有向邻接表(默认) 1:有向邻接矩阵 2:无向邻接矩阵)

int visited[MaxVerNum]; //顶点标志向(用于标记遍历时是否被访问过)

typedef char VertexType; //顶点类型

typedef int EdgeType; //边的权值类型

typedef struct{

//以邻接矩阵储存的图类型MGragh

VertexType vexs[MaxVerNum]; //顶点表

EdgeType edges[MaxVerNum][MaxVerNum]; //邻接矩阵,即边表

int n,e; //顶点数,边数

}MGraph;

typedef struct Node{

//定义边表结点

int adjvex; //邻接点域

struct Node *next; //指向下一个邻接点

//若要表示边上的信息,则应增加一个数据域info

}EdgeNode;

typedef struct vNode{

//定义顶点表结点

VertexType vertex; //顶点域

EdgeNode *firstedge; //边表头指针

}VertexNode;

typedef VertexNode AdjList[MaxVerNum]; //定义邻接表类型

typedef struct{

//以邻接表储存的图类型ALGraph

AdjList adjlist; //邻接表

int n,e; //顶点数,边数

}ALGraph;


void CreateMGraph(MGraph *G){ //建立一个有向图的邻接矩阵存储算法

//建立有向图G的邻接矩阵存储

int i,j,k;

cout<<"1.建立有向图(默认)"<<endl;

cout<<"2.建立无向图"<<endl;

cout<<"请选择:";

cin>>Gtype;

if (Gtype!=2) Gtype=1;

cout<<"请输入顶点数和边数(输入格式为:顶点数,边数):"<<endl;

cin>>G->n>>G->e; //输入顶点数和边数

cout<<"请输入顶点信息(输入格式为:顶点号<CR>):"<<endl;

for (i=0;i<G->n;i++)

cin>>G->vexs[i]; //输入顶点信息,建立顶点表

for (i=0;i<G->n;i++)

for (i=0;j<G->n;j++)

G->edges[i][j]=0; //初始化邻接矩阵

cout<<"请输入每条边对应的两个顶点的序号(输入格式为:i,j):"<<endl;

for (k=0;k<G->e;k++){

cin>>i>>j; //输入e条边,建立邻接矩阵

if (Gtype==2) G->edges[i][j]=1; //若_bk==2,则建立无向图的邻接矩阵存储

}

}//CreateMGraph

void CreateALGraph(ALGraph *G){

//建立有向图的邻接表储存

int i,j,k;

EdgeNode *s;

cout<<"请输入顶点数和边数(输入格式为:顶点数,边数):"<<endl;

cin>>G->n>>G->e; //读入顶点数和边数

cout<<"请输入顶点信息(输入格式为:顶点号<CR>):"<<endl;

for (i=0;i< G->n;i++){ //建立有n个顶点的顶点表

cin>>G->adjlist[i].vertex; //读入顶点信息

G->adjlist[i].firstedge=NULL; //顶点的边表头指针设为空

}

cout<<"请输入每条边对应的两个顶点的序号(输入格式为:i,j):"<<endl;

for (k=0;k< G->e;k++){ //建立边表

cin>>i>>j; //读入边<Vi,Vj>的定点对应序号

s=new EdgeNode; //生成新边表结点s

s->adjvex=j; //邻接点序号为j

s->next=G->adjlist[i].firstedge; //将新边表结点s插入到顶点Vi的边表头部

G->adjlist[i].firstedge=s;

}

}//CreateAlGraph

void DFSAL(ALGraph *G,int i){

//以Vi为出发点对邻接表存储的图G,进行DFS(Depth_First Search)搜索

EdgeNode *p;

cout<<"Visit vertex:V"<<G->adjlist[i].vertex<<endl; //访问顶点Vi

visited[i]=1; //标记Vi以访问

p=G->adjlist[i].firstedge; //取Vi边表头指针

while (p) { //依次搜索Vi的邻接点Vj,j=p->adjvex

if (!visited[p->adjvex]) DFSAL(G,p->adjvex);//若Vj尚未访问,则以Vj为出发点向纵深搜索

p=p->next; //找Vi的下一个邻接点

}

}//DFSAL

void DFSTraverseAL(ALGraph *G){

//深度优先遍历以邻接表储存的图G

int i;

for (i=0;i< G->n;i++)

visited[i]=0; //标志向量初始化

for (i=0;i< G->n;i++)

if (!visited[i])

DFSAL(G,i); //若Vi未访问过,从Vi开始DFS搜索

}//DFSTraveseAL

搜索更多相关主题的帖子: Roman left New 
2005-11-24 17:07
wangxmin
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2005-11-24
收藏
得分:0 

void main(){

int _break=0;

int _KeyPress;

ALGraph *G=NULL;

MGraph *MG;

while(!_break){

cout<<"1.建立图(默认)"<<endl;

cout<<"2.深度优先遍历"<<endl;

cout<<"3.退出"<<endl;

cout<<"请选择:";

cin>>_KeyPress;

switch (_KeyPress){

case 1:

cout<<"0.邻接链表储存方式(默认)"<<endl;

cout<<"1.邻接矩阵储存方式"<<endl;

cout<<"请选择:";

cin>>Gtype;

if (Gtype!=1){

Gtype=0;

CreateALGraph(G);

}

else

CreateMGraph(MG);

break;

case 2:

if (!G) //判断是否存在已建立图

cout<<"请先建立图!"<<endl;

else

if (Gtype)

cout<<"本程序尚不支持邻接矩阵遍历搜索"<<endl;

else

DFSTraverseAL(G); //深度遍历访问

break;

case 3:

_break=1;

break;

default:

cout<<"对不起您输入的指令不存在!"<<endl;

}

}

}

2005-11-24 17:09
快速回复:[求助]帮忙看下,哪里出了错
数据加载中...
 
   



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

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