|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Justin1 于 2020-8-23 14:52 编辑
读《大话数据结构》的时候,有一个的细节,有点疑惑,没有传统的转换说明,单纯读入一个地址。就不大明白,这样操作真的可以吗?我试了试好像有点问题。自己去官方文档上看也没看个所以然来。
我更改并且补齐了代码,想要试着打印一边矩阵和顶点数组。
现在,我想每次顶点上读入的是一个字符,a,b,c,d但是出现了问题,程序中只能读取两个a,b
- #include<stdio.h>
- #define _CRT_SECURE_NO_WARNINGS
- #pragma warning(disable:4996)
- typedef char VertexType; /* 顶点类型应由用户定义 */
- typedef int EdgeType; /* 边上的权值类型应由用户定义 */
- #define MAXVEX 100 /* 最大顶点数,应由用户定义 */
- #define INFINITY 65535/* 用65535代表正无穷*/
- typedef struct
- {
- VertexType vexs[MAXVEX]; /* 顶点表 */
- EdgeType arc[MAXVEX][MAXVEX];/* 邻接矩阵,可看作边表 */
- int numNodes, numEdges; /* 图中当前的顶点数和边数 */
- }MGraph;
- /* 建立无向网图的邻接矩阵表示 */
- void CreateMGraph(MGraph* G)
- {
- int i, j, k, w;
- printf("输入顶点数和边数:\n");
- scanf("%d,%d", &G->numNodes, &G->numEdges); /* 输入顶点数和边数 */
- for (i = 0; i < G->numNodes; i++) /* 读入顶点信息,建立顶点表 */
- {
- printf("the value of Node\n");
- scanf("%c", &(G->vexs[i]));
- }
- for (i = 0; i < G->numNodes; i++)
- for (j = 0; j < G->numNodes; j++)
- G->arc[i][j] = INFINITY; /* 邻接矩阵初始化 */
- for (k = 0; k < G->numEdges; k++) /* 读入numEdges条边,建立邻接矩阵 */
- {
- printf("输入边(vi,vj)上的下标i,下标j和权w:\n");
- scanf("%d,%d,%d", &i, &j, &w); /* 输入边(vi,vj)上的权w */
- G->arc[i][j] = w;
- G->arc[j][i] = G->arc[i][j]; /* 因为是无向图,矩阵对称 */
- }
- }
- //这一部分是我自己加的,没有写完整,大致为了采用for循环读取矩阵的值从而检验程序是否正常运行
- //为了方便,我默认输入顶点数为4,所以有 i < 4
- int main(void)
- {
- int i, j;
- MGraph G;
- CreateMGraph(&G);
- printf("========区分函数和主函数打印==========\n");
- for (i = 0; i < 4; i++) {
- printf("%c\n", G.vexs[i]);
- printf("=====区分顶点数组和矩阵=====\n");
- for (j = 0; j < 4; j++)
- {
- printf("%d\n", G.arc[i][j]);
- }
- }
- return 0;
- getchar();
- }
复制代码
想要这样的结果,还是出现了问题
这个是运行截图
很明显看到我的测试输出
- printf("the value of Node\n");
复制代码
在循环中直接打印了两次才录入一个信息,这点我不太明白,希望有想法的鱼酱们帮忙解答下
|
|