C语言邻接矩阵图代码修复及优化
#include<stdio.h> #include<string.h> #define maxv 10 #define inf 32767 typedef char infotype; typedef struct { int no; infotype info; } vertextype; typedef struct { int edges[maxv][maxv]; vertextype vexs[maxv]; int n; } matgraph;
void creatematgraph(matgraph *T, int n) { char ch[10]; int k = 0, i = 0; int j = 0, r; while (k < n) { gets(ch); T->vexs[k].no = i; T->vexs[k].info = ch[0]; k++; if (k >= n) break; } i = 0; while (i < n) { j = 0; while (j < n) { printf("Is the edge [%d][%d] exist? ", i, j); scanf("%d", &r); T->edges[i][j] = r; j++; } i++; } }
void printgraph(matgraph *T, int n) { int k = 0; while (k < n) { printf("No%d: %c\n", T->vexs[k].no, T->vexs[k].info); k++; } int i = 0, j = 0; while (i < n) { j = 0; while (j < n) { printf("%d\t", T->edges[i][j]); j++; } printf("\n"); i++; } }
int main() { matgraph L = {0}; int n = 5; creatematgraph(&L, n); printgraph(&L, n); return 0; }
修复的问题如下:
creatematgraph函数的参数matgraph T应该改为matgraph *T。while(ch)应该改为while(k < n)。ch=gets();应该改为gets(ch);。T->vexs[k].info=ch;应该改为T->vexs[k].info=ch[0];。scanf("%d",r);应该改为scanf("%d", &r);。while(i<n)和while(j<n)循环块内的代码应该分别放在两个while循环内。printf("No%d:%s/t",T->vexs[k].no,T->vexs[k].info);应该改为printf("No%d: %c\n", T->vexs[k].no, T->vexs[k].info);。printf("%d/t",T->edges[i][j]);应该改为printf("%d\t", T->edges[i][j]);。i++;应该放在while(j<n)循环外面。matgraph L;应该改为matgraph L = {0};.
原文地址: https://www.cveoy.top/t/topic/qfYP 著作权归作者所有。请勿转载和采集!