1.邻接表->邻接矩阵
在这里插入图片描述
2.邻接矩阵->邻接表
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<bitset>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<map>
#include<queue>
#define ll long long
#define mod 1000000007
#define INF 1e9
using namespace std;
//邻接矩阵转化为邻接表
typedef struct edgenode
{
int adjvex;
struct edgenode *next;
}edgenode,*edgetree;
typedef struct vextexnode
{
char data;
edgenode *firstedge;
}vextexnode,*vextextree;
vextexnode adjlist[100];
char vertex[100];
int arc[100][100];
int n,m;
void creat()
{
cout<<"请输入顶点数和边关系数:";
cin>>n>>m;
cout<<"请依次输入所有顶点:\n";
for(int i=0;i<n;i++)cin>>vertex[i];
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(i==j)arc[i][j]=0;
else arc[i][j]=-1;
}
}
cout<<"请依次输入所有边关系:\n";
for(int i=0;i<m;i++)
{
char c1,c2;cin>>c1>>c2;
int f1=-1,f2=-1;
for(int j=0;j<n;j++)
{
if(vertex[j]==c1)f1=j;
if(vertex[j]==c2)f2=j;
}
arc[f1][f2]=1;
}
}
void exchange()
{
for(int i=0;i<n;i++)
{
adjlist[i].data=vertex[i];
adjlist[i].firstedge=NULL;
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(arc[i][j]==1)
{
edgetree p=new edgenode;
p->adjvex=j;
p->next=NULL;
if(adjlist[i].firstedge==NULL)adjlist[i].firstedge=p;
else
{
edgetree q=adjlist[i].firstedge;
while(q->next)q=q->next;
q->next=p;
}
}
}
}
for(int i=0;i<n;i++)
{
edgetree p=adjlist[i].firstedge;
for(int j=0;p!=NULL;j++,p=p->next)
{
if(j==0)cout<<adjlist[i].data<<"的邻接点:"<<adjlist[p->adjvex].data;
else cout<<" "<<adjlist[p->adjvex].data;
}
cout<<"\n";
}
}
int main()
{
creat();
exchange();
return 0;
}