1 void dispmgraph(AdjMatrix adj)//输出有向图的邻接矩阵
2 {
3 int i,j,n,e;
4 n=adj.n;
5 e=adj.e;
6 printf("输出有向图的矩阵表示:\n");
7 printf(" ");
8 for(i=0;i<n;i++)
9 printf("%3d",i);
10 printf("\n");
11 for(i=0;i<n;i++)
12 {
13 printf("%3d",i);
14 for(j=0;j<n;j++)
15 if(adj.edges[i][j]==0)
16 printf("..");
17 else
18 printf("%3d",adj.edges[i][j]);
19 printf("\n");
20 }
21 }
1 void nattolist(AdjMatrix a,AdjList *&g)
2 {
3 int i,j,n;
4 n=a.n;
5 ArcNode *p;
6 for(i=0;i<n;i++)
7 g[i]->firstarc=NULL;
8 for(i=0;i<n;i++)
9 for(j=n-1;j>=0;j--)
10 if(a.edges[i][j]!=0)
11 {
12 p=(ArcNode*)malloc(sizeof(Arcnode));
13 p->adjvex=j;
14 p->nextarc=g[i]->firstarc;
15 g[i]->firstarc=p;
16 }
17 }
18
19 int getnum(AdjList *g)
20 {
21 int i,n=0,visited[MAXVEX];
22 for(i=0;i<MAXVEX;i++)
23 visited[i]=0;
24 dfs(g,0);
25 for(i=0;i<g->n;i++)
26 if(visited[i]==0)
27 {
28 n++;
29 dfs(g,i);
30 }
31 return n;
32 }
33
34 void dfs1(AdjList *g,int v)
35 {
36 int i;
37 ArcNode *p;
38 int visited[MAXVEX],top=-1,stack[MAXVEX];
39 for(i=0;i<MAXVEX;i++)
40 visited[i]=0;
41 printf("%d ",v);
42 top++;
43 stack[top]=v;
44 visited[v]=1;
45 while(top>=0)
46 {
47 v=stack[top];
48 top--;
49 p=g[v]->firstarc;
50 while(p!=NULL&&visited[p->adjvex]==1)
51 p=p->nextarc;
52 if(p==NULL)
53 top--;
54 else{
55 v=p->adjvex;
56 printf("%d ",v);
57 visited[v]=1;
58 top++;
59 stack[top]=v;
60 }
61 }
62 }
63
64
65 #define MAXVEX 100
66 struct vertex
67 {
68 int num;
69 char data;
70 };
71 typedef struct graph
72 {
73 int n;
74 int e;
75 struct vertex vexs[MAXVEX];
76 int edges[MAXNVEX][MAXVEX];
77 }AdjMatrix;
78
79 AdjMatrix creategraph()
80 {
81 int i,j,k,w,n,e;
82 char b,t;
83 AdjMatrix adj;
84 printf("顶点数(n)和边数(e):");
85 scanf("%d%d",&n,&e);
86 adj.n=n;
87 adj.e=e;
88 for(i=0;i<n;i++)
89 {
90 printf(" 第%d个顶点的信息:",i+1);
91 scanf("%c",&adj.vex[i].data);
92 adj.vex[i].num=i;
93 }
94 for(i=0;i<n;i++)
95 for(j=0;j<n;j++)
96 adj.edges[i][j]=0;
97 for(k=0;k<e;k++)
98 {
99 printf("第%d条边:\n",k+1);
100 printf(" 起点:\n";
101 scanf("%d",&b);
102 printf(" 终点:");
103 scanf("%d",&t);
104 printf(" 权值:");
105 scanf("%d",&w);
106 i=0;
107 while(i<n&&adj.vexs[i].data!=b)
108 i++;
109 if(i>=n)
110
111 }
112 }