克己ovo 2021-10-26 17:42 采纳率: 90%
浏览 15
已结题

为什么 不能用字母去找顶点表下标 然后对邻接矩阵进行修改 会出错


#include<stdio.h> 
#include<stdlib.h>
#define Maxn 10        // 图中顶点数
#define Maxe 10      // 图中边数
typedef struct graph{
    char vex[Maxn];               // 顶点表 
    int arcs[Maxe][Maxe];    // 邻接矩阵
    int VexNum,ArcNum;         //当前顶点 边数 
}Graph,*Ptrl_Graph;
//无向图的邻接矩阵创建 
void  CreateW(Ptrl_Graph &g) 
{    
    printf("请输入顶点数VexN:\n");
    scanf("%d",&g->VexNum);
    printf("请输入边数ArcN:\n");    scanf("%d",&g->ArcNum);
    printf("输入顶点集:");
    for(int i = 0;i<g->VexNum;i++){
        scanf("%c",&g->vex[i]);
        getchar();                   //吃空格 
    }
    printf("顶点表初始化完成\n"); 
    int i, j, k;
    for (i=0; i<=g->VexNum;  i++ )
        for (j=0; j<=g->ArcNum; j++)
            g->arcs[i][j]=0;         //将邻接矩阵初始化为0 
    printf("邻接矩阵初始化完成\n");
    for (k=1;k<=g->ArcNum; k++)
    {
//        printf("第%d条边的位置:\n",k);
//        printf("输入边的下标位置(i j):\n");
//        scanf("%d %d",&i,&j); 
//        g->arcs[i][j] = 1;         //建立边 
//        g->arcs[j][i] = 1;         //无向图对称矩阵 
        printf("请输入两个相连的顶点(AB):\n");
        char x,y;
        int count1,count2;
        scanf("%c%c",&x,&y);
        getchar();
        //输入两个相连的边 去顶点表找
        for(i = 0;i<g->VexNum;i++){
            if(x == g->vex[i]){
                break;
            }    
        }
        for(j = 0;j<g->VexNum;j++){
            if(y == g->vex[j]){
                break;
            }        
        }
        g->arcs[i][j] = 1;
        g->arcs[j][i] = 1;
    }

}

//有向图的邻接矩阵
void  CreateY(Ptrl_Graph &g)
{    int i;
    printf("请输入顶点数VexN:\n");
    scanf("%d",&g->VexNum);
    printf("请输入边数ArcN:\n");
    scanf("%d",&g->ArcNum);
    printf("输入顶点集:");
    for(i = 0;i<g->VexNum;i++){
        scanf("%c",g->vex[i]);
        getchar();//吃空格 
    }
    printf("顶点表初始化完成\n"); 
    int j, k;
    for (i=0; i<=g->VexNum;  i++ )
        for (j=0; j<=g->ArcNum; j++)
            g->arcs[i][j]=0;         //将邻接矩阵初始化为0 
    printf("邻接矩阵初始化完成\n");
    for (k=1; k<=g->ArcNum; k++)
    {
        printf("第%d条边的位置:\n",k);
        printf("输入边的下标位置(i,j):\n");
        scanf("%d %d",&i,&j);
        g->arcs[i][j] = 1;         //建立边 
        //g.arcs[j][i] = 1;         //无向图对称矩阵 
    }
}

void  printArr(Ptrl_Graph &g){
    int i,j;
    for(i=0;i<g->VexNum;i++){
        for(j=0;j<=g->ArcNum;j++){
            printf("%d ",g->arcs[i][j]);//cout<<g.arcs[i][j]<<" ";
        }
        printf("\n");
    }
}
int main(){
    Ptrl_Graph G = (Ptrl_Graph)malloc(sizeof(Graph));
    CreateW(G);
    printArr(G);
}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 11月3日
    • 修改了问题 10月26日
    • 创建了问题 10月26日

    悬赏问题

    • ¥15 poi合并多个word成一个新word,原word中横版没了.
    • ¥15 【火车头采集器】搜狐娱乐这种列表页网址,怎么采集?
    • ¥15 求MCSCANX 帮助
    • ¥15 机器学习训练相关模型
    • ¥15 Todesk 远程写代码 anaconda jupyter python3
    • ¥15 我的R语言提示去除连锁不平衡时clump_data报错,图片以下所示,卡了好几天了,苦恼不知道如何解决,有人帮我看看怎么解决吗?
    • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
    • ¥20 关于URL获取的参数,无法执行二选一查询
    • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
    • ¥15 marlin编译错误,如何解决?