#include<stdio.h>
typedef int VertexType;
typedef int EdgeType;
#define MaxVex 100
#define TRUE 1
#define INFINITY 0
#define FALSE 0
typedef int Bool;
Bool visited[MaxVex];
typedef struct
{
VertexType Vexs[MaxVex];
EdgeType Edge[MaxVex][MaxVex];
int numV;
int numE;
}MGraph;
//创建无向图的邻接矩阵
void CreateMGraph(MGraph *G)
{
int vi, vj, e;
printf("请输入图的顶点数和边数(顶点数 边数):");
scanf("%d%d", &G->numV, &G->numE);
for(int i = 0; i < G->numV; i++)
{
for (int j = 0; j < G->numV; j++)
{
if (i == j)
{
G->Edge[i][j] = 0;//将顶点与自身的权值初始化为0
}
else
{
G->Edge[i][j] = INFINITY;//将顶点与其他顶点的权值初始化为Infinity
}
}
}
for ( i = 0; i < G->numV; i++)
{
printf("请输入第%d个顶点的值:", i + 1);
scanf("%d", &G->Vexs[i]);
}
printf("\n");
for (int k = 0; k < G->numE; ++k)
{
int i, j;
printf("请输入边的信息(顶点 顶点 权值):");
scanf("%d%d%d", &vi, &vj, &e);
for (i = 0; i < G->numV; i++)
{
if (G->Vexs[i] == vi)
{
break;//找出顶点的在数组中的位置
}
}
for (j = 0; j < G->numV; j++)
{
if (G->Vexs[j] == vj)
{
break;
}
}
G->Edge[i][j] = e;
G->Edge[j][i] = e;
}
}
//输出无向图的邻接矩阵
void ShowpGraph(MGraph G)
{
printf("\n邻接矩阵为:\n");
printf("\t");
for (int i = 0; i < G.numV; ++i)
{
printf("%6d", G.Vexs[i]);
}
printf("\n");
for ( i = 0; i < G.numV; ++i)
{
printf("\n%8d", G.Vexs[i]);
for (int j = 0; j < G.numV; ++j)
{
if (G.Edge[i][j] == INFINITY)
{
printf("%6s", "∞");
}
else
{
printf("%6d", G.Edge[i][j]);
}
}
printf("\n");
}
}
//图的深度优先遍历
void DFS(MGraph G, int i)
{
int j;
visited[i] = TRUE;
printf("%c ", G.Vexs[i]);
for (j=0; j < G.numE; j++)
{
if (G.Edge[i][j]!=INFINITY && !visited[j])
DFS(G, j);
}
}
void DFSTraverse(MGraph G)
{
int i;
for(i=0;i<G.numE;i++)
{
visited[i] = FALSE;
}
for (i=0; i<G.numE; ++i)
{
if (!visited[i])
DFS(G, i);
}
}
//图的广度优先
void BFSTraverse(MGraph *G)
{
int i, j;
for (i=0; i<G->numE; ++i)
visited[i] = FALSE;
for (i=0; i<G->numE; ++i)
{
if (!visited[i])
{
visited[i] = TRUE;
printf("%c ", G->Vexs[i]);
while (!G)
{
for (j=0; j<G->numE; ++j)
{
if (!visited[j] && G->Edge[i][j]!=INFINITY)
{
visited[j] = TRUE;
printf("%c ", G->Vexs[j]);
}
}
}
}
}
}
int main()
{
MGraph G;
CreateMGraph(&G);
ShowpGraph(G);
printf("\n图的深度优先遍历为: ");
DFSTraverse(G);
printf("\n图的广度优先遍历为: ");
BFSTraverse(&G);
}
来个人帮看看,能运行,但广度搜索和深度搜索出不来
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- 树下等苹果 2022-05-10 16:58关注
你有很多变量未定义就使用了:
或者你把代码按照代码格式提交,不然少了很多符号:本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥20 docker里部署springboot项目,访问不到扬声器
- ¥15 netty整合springboot之后自动重连失效
- ¥15 悬赏!微信开发者工具报错,求帮改
- ¥20 wireshark抓不到vlan
- ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
- ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
- ¥15 stata安慰剂检验作图但是真实值不出现在图上
- ¥15 c程序不知道为什么得不到结果
- ¥15 键盘指令混乱情况下的启动盘系统重装
- ¥40 复杂的限制性的商函数处理