代码如下,分析详见注释 :
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
using namespace std;
//------------邻接矩阵-----------
#define MAX 20
typedef char Dtype;
typedef int mapmax[MAX][MAX];
typedef struct{
int dian,hu;
Dtype d[MAX];
mapmax map;
}M;
int locate(M G,Dtype a);
void creat_map(M &G);
//-----------邻接表--------------
typedef char Diantype;
//弧的结构体
typedef struct ArcNode{
int adddain;//指向顶点位置的指针
struct ArcNode *nextarc;//指向下一条弧的指针
}ArcNode;
//点的结构体
typedef struct VNode{
Diantype data;//顶点信息
ArcNode *firstarc;//指向第一条依附该点的弧的指针
}VNode, AdjList[MAX];
typedef struct{
AdjList toulist; //所有头节点的表
int dian,hu; //当前顶点数和弧数
}ALG;
int locate_dian(ALG H,Diantype a);
void Creat_ALG(ALG &H);
//-------------转换-------------
void manage(ALG &H,M &mm)
{
mm.dian=H.dian; mm.hu=H.hu; //弧数点数直接复制
for(int i=1;i<=H.dian;i++)
{
mm.d[i]=H.toulist[i].data; //每个点赋值
ArcNode *p;
p=H.toulist[i].firstarc;
while(p) //第一个点指向的点依次给邻接矩阵赋值
{
mm.map[i][p->adddain]=1;
p=p->nextarc;
}
}
}
int main()
{
ALG A;
Creat_ALG(A);
M mm;
memset(mm.map,0,sizeof(mm.map));
manage(A,mm);
/* for(int i=1;i<=4;i++)
printf("%c ",mm.d[i]);
*/
for(int i=1;i<=A.dian;i++)
{
for(int j=1;j<=A.dian;j++)
{
printf("%d ",mm.map[i][j]);
}
printf("\n");
}
return 0;
}
//---------------邻接表----------------------
int locate_dian(ALG H,Diantype a)
{
for(int i=1;i<=H.dian;i++)
{
if(H.toulist[i].data==a)
return i;
}
return 0;
}
void Creat_ALG(ALG &H)
{//根据输入的有向图G的顶点数及边数,建立图G的邻接表
printf("请输入点数和弧数\n");
cin>>H.dian>>H.hu;
getchar();
printf("请输入节点信息\n");
for(int i=1;i<=H.dian;i++)
{
cin>>H.toulist[i].data;
H.toulist[i].firstarc=NULL;
}
getchar();
printf("请输入%d条弧\n",H.hu);
for(int k=1;k<=H.hu;k++)
{
Diantype x,y;
int i,j;
ArcNode *p,*node;
cin>>x>>y; getchar();
// cout<<x<<y;
i=locate_dian(H,x);j=locate_dian(H,y);
// cout<<i<<j;
//----i->j-------
node=new ArcNode;
node->adddain=j;
p=H.toulist[i].firstarc;
H.toulist[i].firstarc=node;
node->nextarc=p;
//----j->i--------
node=new ArcNode;
node->adddain=i; node->nextarc=NULL;
p=H.toulist[j].firstarc;
H.toulist[j].firstarc=node;
node->nextarc=p;
}
}
//---------------邻接矩阵------------------
int locate(M G,Dtype a)
{
for(int i=1;i<=G.dian;i++)
{
if(a==G.d[i])
return i;
}
return 0;
}
void creat_map(M &G)
{//输入无向图的顶点数及弧数,建立G无向图
Dtype x,y;
printf("请输入点数和弧数\n");
cin>>G.dian>>G.hu;
getchar();
printf("请输入%d个点\n",G.dian);
for(int i=1;i<=G.dian;i++)
cin>>G.d[i];
memset(G.map,0,sizeof(G.map));
printf("请输入%d条弧\n",G.hu);
getchar();
for(int k=0;k<G.hu;k++)
{
int i,j;
cin>>x>>y;
// printf("x=%c y=%c ",x,y);
getchar();
i=locate(G,x);j=locate(G,y);
G.map[i][j]=G.map[j][i]=1;
}
}