#include<iostream> using namespace std; #define MAX_VERTEX_NUM 20 #define VertexType int typedef enum{DG,DN,UDG,UDN}GraphKind; typedef struct { VertexType vexs[MAX_VERTEX_NUM];//頂點信息 int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//矩陣 int pointnum;//頂點數 int edgenum;//邊數 GraphKind kind; }MGraph; int Locate(MGraph G,VertexType v) { for(int i = 0;i<G.pointnum;i++) { if(v == G.vexs[i]) return i; } return -1; } void CreateUDN(MGraph &G) { int i; int j; int k; int w; char flag; VertexType v1,v2; G.kind = UDN; cout<<"請輸入無向網的頂點數,邊數"<<endl; cin>>G.pointnum>>G.edgenum; cout<<"請輸入頂點信息"<<endl; for(i = 0;i<G.pointnum;i++) { cin>>G.vexs[i]; for(j = 0;j<i;j++) { if(G.vexs[j] == G.vexs[i]) break; } if(j < i) { i--; cout<<"已經存在這樣的頂點,重新輸入"<<endl; continue; } } for(i = 0;i<G.pointnum;i++) { for( j = 0;j<G.pointnum;j++) { G.arcs[i][j] = 0; } } for(k = 0;k<G.edgenum;k++) { cout<<"輸入相鄰邊的頂點及其距離"<<endl; cin>>v1>>v2>>w; i = Locate(G,v1); j = Locate(G,v2); if(G.arcs[i][j] == 0) { G.arcs[i][j] = w; G.arcs[j][i] = G.arcs[i][j]; } else { cout<<"已經存在該邊,是否重新輸入?Y 確認"<<endl; cin>>flag; if(flag == 'y'|| flag == 'Y') { G.arcs[i][j] = w; G.arcs[j][i] = G.arcs[i][j]; } k--; } } } void Disp(MGraph G) { for(int i = 0 ;i<G.pointnum;i++) { for(int j = 0;j<G.pointnum;j++) { cout<<" "<<G.arcs[i][j]; } cout<<endl; } } int main() { MGraph G; CreateUDN(G); Disp(G); return 1; }
運行結果