//以鄰接矩陣作為圖的存盤結構,創建無向圖。
#include <stdio.h>
#include <stdlib.h>
#define M 200
#define Max 32767
typedef struct {
char vexs[M];
int arcs[M][M];
int vexnum, arcnum;//頂點數,邊數
} Graph;
//回傳位置函式
int Locatevex(Graph *G, char v) {
int i;
for (i = 0; i < G->vexnum; i++) {
if (G->vexs[i] == v)
return i;
}
return -1;
}
void CreateGraph(Graph *G) {
int i, j, k, v1, v2, w;
printf("請輸入你要生成圖的頂點數和邊數:");
scanf("%d%d", &G->vexnum, &G->arcnum);
for (i = 0; i < G->vexnum; i++) {
printf("請輸入第%d個頂點資訊:", i + 1);
scanf("%c", G->vexs[i]);
}
for (i = 0; i < G->vexnum; i++) {
for (j = 0; j < G->vexnum; j++) {
G->arcs[i][j] = 32767;
if (i == j) {
G->arcs[i][j] = 0;
}
}
}
printf("請輸入兩個頂點和對應邊的權值:\n");
for (k = 0; k < G->arcnum; i++) {
scanf("%c%c%d", &v1, &v2, &w);
i = Locatevex(G, v1);
j = Locatevex(G, v2);
G->arcs[i][j] = w;
G->arcs[j][i] = G->arcs[i][j];
}
}
void PrintGraph(Graph *G) {
int i, j;
printf("鄰接矩陣為:\n");
for (i = 0; i < G->vexnum; i++) {
printf(" %c", G->vexs[i]);
}
printf("\n");
for (i = 0; i < G->vexnum; i++) {
printf("%c ", G->vexs[i]);
for (j = 0; j < G->vexnum; j++) {
if (G->arcs[i][j] == 32767) {
printf("$");
} else {
printf("%d", G->arcs[i][j]);
}
}
}
printf("\n");
}
void menu () {
printf("**************************\n");
printf("**1.創建圖 2.列印圖**\n");
printf("**3.深度優先 4.廣度優先**\n");
printf("**5.退出 **\n");
printf("**************************\n");
}
int main() {
int i, num;
Graph G;
while (1) {
menu();//選擇選單
printf("請輸入你要選擇的功能:");
scanf("%d", num);
switch (num) {
case 1:
CreateGraph(&G);//創建圖
break;
case 2:
PrintGraph(&G);//列印圖
break;
case 5:
exit(0);
break;
}
}
return 0;
}

uj5u.com熱心網友回復:
scanf("%c", G->vexs[i]); 引數為陣列元素也要用地址,scanf("%c", &G->vexs[i]);轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/285255.html
標籤:C語言
上一篇:致CSDN論壇用戶
下一篇:C++類與常成員函式的創建