中易网

C语言数据结构

答案:1  悬赏:50  
解决时间 2021-02-21 19:55
用邻接矩阵建立无向图并深序遍历
C语言的,程序
最佳答案
#include <iostream.h>
#include <stdlib.h>

#define INFINITY 0

#define MAX_VERTEX_NUM 10 //最大顶点数

#define MAX_EDGE_NUM 40 //最大边数

typedef enum {DG,DN,UDG,UDN}Graphkind;

typedef char VertexType; //顶点数据类型

typedef struct ArcCell
{
int adj; //无权图,1或0表示相邻否;带权图则是权值。
//int *info;
}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];

typedef struct
{
VertexType vexs[MAX_VERTEX_NUM]; //顶点向量
AdjMatrix arcs; //邻接矩阵
int vexnum,arcnum; //图的当前顶点数和弧数。
Graphkind kind;
}MGraph;

int LocateVex(MGraph G,VertexType v1)
{
int i;
for(i=0;i<G.vexnum;i++)
if(G.vexs[i]==v1)
return i;
return -1;
}

int CreatUDN(MGraph &G)
// 采用数组表示法,构造无向网 G
{
VertexType v1,v2;
int w,j;
cout<<"输入图的顶点数"<<endl;
cin>>G.vexnum;
cout<<"输入图的弧数"<<endl;
cin>>G.arcnum;
for(int i=0;i<G.vexnum;i++)
{
cout<<"输入顶点向量"<<endl;
cin>>G.vexs[i];
}
for(i=0;i<G.vexnum;i++)
for(j=0;j<G.vexnum;j++)
{
G.arcs[i][j].adj=INFINITY;
}
for(int k=0;k<G.arcnum;++k) //构造邻接矩阵
{
cout<<"输入边依附的两个顶点"<<endl;
cin>>v1>>v2;
cout<<"输入此边的权值"<<endl;
cin>>w;
i=LocateVex(G,v1);
j=LocateVex(G,v2);
G.arcs[i][j].adj=w;
G.arcs[j][i].adj=G.arcs[i][j].adj;
}
return 1;
}

void dispMGraph(MGraph G)
{
cout<<"图的邻接矩阵图是:"<<endl;
for(int i=0;i<G.vexnum;i++)
{
for(int j=0;j<G.vexnum;j++)
cout<<" "<<G.arcs[i][j].adj;
cout<<endl;
}
}

void main()
{
MGraph G;
CreatUDN(G);
dispMGraph(G);
}

// 邻接表 表示:

#include <iostream.h>
#include <stdlib.h>

#define MAX_VERTEX_NUM 20 //最大顶点数

#define MAX_EDGE_NUM 40 //最大边数

int visited[ MAX_VERTEX_NUM];

typedef int VertexType ; //顶点数据类型

typedef struct ArcNode
{
int adjvex;
int weight;
struct ArcNode *nextarc;
}ArcNode;

typedef struct VNode
{
VertexType data;
ArcNode *firstarc;
}VNode,AdjList[MAX_VERTEX_NUM];

typedef struct
{
AdjList vertices;
int vexnum,arcnum;
int kind;
}ALGraph;

void CreateDG(ALGraph &G)
{
int i,j,k;
ArcNode *p;
cout<<"创建一个图:"<<endl;
cout<<"顶点数:"; cin>>G.vexnum;cout<<endl;
cout<<"边数:"; cin>>G.arcnum; cout<<endl;
for(i=0;i<G.vexnum;i++)
{
G.vertices[i].data=i;
G.vertices[i].firstarc=NULL;
}
for(k=0;k<G.arcnum;k++)
{
cout<<"请输入第"<<k+1<<"条边:";
cin>>i>>j;
p=(ArcNode*)malloc(sizeof(ArcNode));
p->adjvex=j;
p->nextarc=G.vertices[i].firstarc;
G.vertices[i].firstarc=p;
}
}

void Disp(ALGraph G)
{
int i,j;
ArcNode *p;
cout<<"输出图为:"<<endl;
for(i=0;i<G.vexnum;i++)
{
p=G.vertices[i].firstarc;
j=0;
while(p!=NULL)
{
cout<<"("<<i<<","<<p->adjvex<<")";
p=p->nextarc;
j=1;
}
if(j==1)
cout<<endl;
}
}

void dfs(ALGraph G,int v) //深度优先遍历
{
ArcNode *p;
cout<<v<<" ";
visited[v]=1;
p=G.vertices[v].firstarc;
while(p!=NULL)
{ if(!visited[p->adjvex])
dfs(G,p->adjvex);
p=p->nextarc;
}
return ;
}

void dfs1(ALGraph G)
{
int i;
for(i=0;i<G.vexnum;i++)
if(visited[i]==0)
dfs(G,i);
}

void main()
{
ALGraph G;
CreateDG(G);
int v;
Disp(G);
cout<<"输入顶点:";
cin>>v;
cout<<"深度优先序列:";
dfs1(G);
cout<<endl;
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
石家庄业余时间学化妆的地方
临沂哪里有卖耐火材料的?急
战地1正版标准版多钱啊
android操作系统这个进程一直持续唤醒怎么玩
1204拖拉机低三档的行驶速度是多少
埋线双眼皮埋深了又宽能恢复好吗
新华经营部在哪里啊,我有事要去这个地方
我们的爱是永远都不会改变,我们的爱 永不 。
海军蓝是什么颜色
天宝金店地址在哪,我要去那里办事
纳税的种类有哪些
女孩a34胸围是多少厘米啊?是85cm还是95cm啊
沉迷幻想之中,逃避现实,自卑
中国留学生有国内驾照去西班牙用在国内怎样认
一点一横长口字在中央大口张着嘴小口里面藏迷
推荐资讯
龙岗万科乐凯撒比萨什么时候开业的
骚白是什么意思?
三亚大东海温馨假日海景公寓地址好找么,我有
美丽的府君山一千字作文
发达街/盛达街(路口)地址有知道的么?有点事
我的工资有基本工资+交通午餐补助+固定奖金+
天王鲫鱼食怎么和
windows程序设计 第五版 的一个例子运行不了
用水蛭制成的中成药有哪些
有什么办法可以令我努力的学习?
漳县百信药店地址有知道的么?有点事想过去
我的联想C305一体机显卡温度达到70多度 怎么
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?