/<span style="font-size:18px;">/1.邻接矩阵实现</span>
</pre><pre code_snippet_id="693878" snippet_file_name="blog_20150613_1_2994608" name="code" class="cpp">#include<iostream>
using namespace std;
#define MAX_VEX_NUM 50
typedef char VertexType;
typedef enum{
UDG,DG
}GraphType;
typedef struct Graph
{
VertexType name[MAX_VEX_NUM];
int adjMatrix[MAX_VEX_NUM][MAX_VEX_NUM];
int vnum;
int linenum;
GraphType type;
}*MyGraph,G;
int isVisited[MAX_VEX_NUM];
int indexofv(MyGraph &g,VertexType c )
{
for(int i=1;i<=g->vnum;i++)
{
if(g->name[i]==c)
return i;
}
}
void createGraph(G *g)
{
int type;
VertexType c1,c2;
int v1,v2;
cout<<"请输入顶点数量"<<endl;
cin>>g->vnum;
cout<<"请输入边数"<<endl;
cin>>g->linenum;
cout<<"请输入图的类型,0代表无向图,1代表有向图"<<endl;
cin>>type;
if(type==1)
{
g->type=DG;
}else if(type==0)
{
g->type=UDG;
}else
{
cout<<"输入类型不正确"<<endl;
return;
}
//初始化邻接矩阵
for(int i=1;i<=g->vnum;i++)
{
for(int j=1;j<=g->vnum;j++)
{
g->adjMatrix[i][j]=0;
}
}
//输入顶点的名称
cout<<"请输入顶点"<<endl;
for(int i=1;i<=g->vnum;i++)
{
cin>>g->name[i];
}
//请输入由哪两个顶点组成边
cout<<"请输入组成顶点的边"<<endl;
//如果为无向图
if(g->type==UDG)
{
for(int i=1;i<=g->linenum;i++)
{
cin>>c1;
cin>>c2;
v1=indexofv(g,c1);
v2=indexofv(g,c2);
g->adjMatrix[v1][v2]=1;
g->adjMatrix[v2][v1]=1;
}
}
else
{
for(int i=1;i<=g->linenum;i++)
{
cin>>c1;
cin>>c2;
v1=indexofv(g,c1);
v2=indexofv(g,c2);
g->adjMatrix[v1][v2]=1;
//g->adjMatrix[v2][v1]=1;
}
}
cout<<"邻接矩阵如下"<<endl;
for(int i=1;i<=g->vnum;i++)
{
int count=0;
for(int j=1;j<=g->vnum;j++)
{
count++;
cout<<g->adjMatrix[i][j]<<" ";
if(count==g->vnum)
cout<<endl;
}
}
cout<<"顶点信息如下:"<<endl;
f