#include <stdio.h>
#include <stdlib.h>
#define MAX 100
typedef struct{
int vexs[MAX];
int arcs[MAX][MAX];
int vexnum,arcnum;
}MGraph;
typedef struct ArcNode{
int adjvex;
int weight;
struct ArcNode *nextarc;
}ArcNode;
//p163
int LocateVex(MGraph G,VertexType v){
//查找顶点在无向图G中的位置
for(i=0;i<G.vexnum;i++)
if(G.vexs[i]==v)
return i;
return -1;
}//LocateVex
void CreateGraph(MGraph &G)
//根据输入的顶点数和边数,建立无向图G的邻接矩阵
scanf("%d%d",&G.vexnum,&G.arcnum);
for(i=0;i<G.vexnum;i++)
scanf(&G.vex[i]);
for(i=0;i<G.vexnum;i++)
for(j=0;j<G.vexnum;j++)
G.arcs[i][j]=0;
for(k=0;k<G.arcnum;k++){
scanf(&u,&v);
i=LocateVex(G,u);
if(i==-1){
printf("error\n"); return;
}
j=LocateVex(G,v);
if(j==-1){
printf("error\n"); return;
}
G.arcs[i][j]=G.arcs[j][i]=1;
}//for
}//CreateGraph
int FirstAdjVex(MGraph G,int v){
//在无向图G中查找顶点v的第一个临界点
for(j=0;j<G.vexnum;j++)
if(G.arcs[v][j]==1)
return j;
return -1;
}//FirstAdjVex
int NextAdjVex(MGraph G,int v,int w){
//在图G中查找相对于w的下一个邻接点
for(j=w+1;j<G.vexnum;j++)
if(G.arcs[v][j]==1)
return j;
return 1;
}//NextAdjVex
#include <stdlib.h>
#define MAX 100
typedef struct{
int vexs[MAX];
int arcs[MAX][MAX];
int vexnum,arcnum;
}MGraph;
typedef struct ArcNode{
int adjvex;
int weight;
struct ArcNode *nextarc;
}ArcNode;
//p163
int LocateVex(MGraph G,VertexType v){
//查找顶点在无向图G中的位置
for(i=0;i<G.vexnum;i++)
if(G.vexs[i]==v)
return i;
return -1;
}//LocateVex
void CreateGraph(MGraph &G)
//根据输入的顶点数和边数,建立无向图G的邻接矩阵
scanf("%d%d",&G.vexnum,&G.arcnum);
for(i=0;i<G.vexnum;i++)
scanf(&G.vex[i]);
for(i=0;i<G.vexnum;i++)
for(j=0;j<G.vexnum;j++)
G.arcs[i][j]=0;
for(k=0;k<G.arcnum;k++){
scanf(&u,&v);
i=LocateVex(G,u);
if(i==-1){
printf("error\n"); return;
}
j=LocateVex(G,v);
if(j==-1){
printf("error\n"); return;
}
G.arcs[i][j]=G.arcs[j][i]=1;
}//for
}//CreateGraph
int FirstAdjVex(MGraph G,int v){
//在无向图G中查找顶点v的第一个临界点
for(j=0;j<G.vexnum;j++)
if(G.arcs[v][j]==1)
return j;
return -1;
}//FirstAdjVex
int NextAdjVex(MGraph G,int v,int w){
//在图G中查找相对于w的下一个邻接点
for(j=w+1;j<G.vexnum;j++)
if(G.arcs[v][j]==1)
return j;
return 1;
}//NextAdjVex