#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无用
悬赏问题
- ¥15 echarts动画效果失效的问题。官网下载的例子。
- ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
- ¥15 Attention is all you need 的代码运行
- ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
- ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
- ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
- ¥30 关于<main>标签页面跳转的问题
- ¥80 部署运行web自动化项目
- ¥15 腾讯云如何建立同一个项目中物模型之间的联系
- ¥30 VMware 云桌面水印如何添加