#include<windows.h>
#include<stdio.h>
#define INFINITY INT_MAX
#define max_vertex_num 20
typedef enum {DG,DN,UDG,UDN}GraphKind;
typedef struct ArcCell{
int adj;
char * info;
}ArcCell,AdjMatrix[max_vertex_num][max_vertex_num]; typedef struct {
char vexs[max_vertex_num];
AdjMatrix arcs;
int vexnum,arcnum;
GraphKind kind;
}MGraph;
bool visited[max_vertex_num];
void (*visitfunc)(int v);
int Create_MGraph(MGraph &G);
int LocateVex(MGraph &G,char v);
int CreateDN(MGraph &G);
int CreateUDN(MGraph &G);
int CreateUDG(MGraph &G);
int CreateDG(MGraph &G);
void DFSTraverse(MGraph G,void (*visitfunc)(int v));
void DFS(MGraph G,int v);
void visit(int v);
int FirstAdjVex(MGraph G,int v);
int NextAdjVex(MGraph G,int v,int w);
int DFSex(MGraph G,int v);
main(){
MGraph G;
Create_MGraph(G);
int v;
printf("please input the v's vaule\n");
scanf("%d",&v);
DFSex(G,v);
}
int Create_MGraph(MGraph &G){
printf("please input graph kind(dg-0,dn-1,udg-2,udn-3)\n");
scanf("%d",&G.kind);
//getchar();
switch(G.kind){
case DG:return CreateDG(G);
case DN:return CreateDN(G);
case UDG:return CreateUDG(G);
case UDN:return CreateUDN(G);
default:return ERROR;
}
}
int CreateUDN(MGraph &G){
printf("please input graph's vexnum,arcnum\n");
scanf("%d%d",&G.vexnum,&G.arcnum);
getchar();
for(int l=0;l<G.vexnum;++l)visited[l]=FALSE;
for(int i=0;i<G.vexnum;++i) {
printf("please input %d vexter\n",i+1);
scanf("%c",&G.vexs[i]);
getchar();
}
for(int i=0;i<G.vexnum;++i){
for(int j=0;j<G.vexnum;++j)
G.arcs[i][j].adj=INFINITY;
}
for(int k=0;k<G.arcnum;++k){
int w;
//char v1,v2;
int m;//=LocateVex(G,v1);
int n;//=LocateVex(G,v2);
printf("please input vex-weight,vex1,vex2\n");
scanf("%d%d%d",&w,&m,&n);
getchar();
printf("m=%d,n=%d,w=%d\n",m,n,w);
G.arcs[m][n].adj=w;
G.arcs[n][m]=G.arcs[m][n];
printf("%d\n",G.arcs[m][n].adj);
}
for(int i=0;i<G.vexnum;++i){
for(int j=0;j<G.vexnum;++j)
{ if(G.arcs[i][j].adj!=INFINITY)
printf("%d\t",G.arcs[i][j].adj);
else
printf("0\t");
}
printf("\n");
}
return 0;
}
int CreateDN(MGraph &G){
}
int CreateUDG(MGraph &G){
}
int CreateDG(MGraph &G){
}
int LocateVex(MGraph &G,char v){
for(int i=0;i<G.vexnum;++i){
if(v==G.vexs[i]){
return i;
}
}
return ERROR;
}
void DFSTraverse(MGraph G,void (*visitfunc)(int v)){ visitfunc=visit;
int v;
for(v=0;v<G.vexnum;++v)visited[v]=FALSE;
for(v=0;v<G.vexnum;++v)
if(!visited[v]) DFS(G,v);
}
void DFS(MGraph G,int v){
visited[v]=TRUE;
visitfunc(v);
int w;
for(w=FirstAdjVex(G,v);w>=0;w=NextAdjVex(G,v,w)) if(!visited[w]) DFS(G,w);
}
void visit(int v){
printf("%c\n",v);
}
int FirstAdjVex(MGraph G,int v){
char data;
int i;
for(i=0;i<=G.vexnum;i++){
if(G.arcs[v][i].adj!=INFINITY){
data=G.vexs[i];
return i;
}
return -1;
}
int NextAdjVex(MGraph G,int v,int w){
char data;
int i;
for(i=w+1;i<=G.vexnum;i++){
if(G.arcs[v][i].adj!=INFINITY){
data=G.vexs[i];
return i;
}
}
return -1;
}
int DFSex(MGraph G,int v){
visited[v]=TRUE;
printf("%c\n",G.vexs[v]);
int w;
for(w=FirstAdjVex(G,v);w>=0;w=NextAdjVex(G,v,w)) if(!visited[w]) DFSex(G,w);
}。