四野荒年 2022-05-10 16:47 采纳率: 100%
浏览 60
已结题

来个人帮看看,能运行,但广度搜索和深度搜索出不来



#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);
}


  • 写回答

3条回答 默认 最新

  • 树下等苹果 2022-05-10 16:58
    关注

    你有很多变量未定义就使用了:

    img


    或者你把代码按照代码格式提交,不然少了很多符号:

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 5月18日
  • 已采纳回答 5月10日
  • 修改了问题 5月10日
  • 创建了问题 5月10日

悬赏问题

  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装
  • ¥40 复杂的限制性的商函数处理