邻接表转换邻接矩阵
无向图转矩阵,输入边
#include<iostream>
using namespace std;
struct bian
{
int data;
bian *next;
};
struct dian
{
int ch;
bian *to;
};
class zb
{
public:
zb(int n,int e);
~zb(){};
void linjiebiao(int n);
void zhuanhuan(int n);
void linjiejuzhen(int n);
private:
dian a[10];
int A[10][10];
int N,E;
};
zb::zb(int n,int e)
{
int ii;
for(ii=0;ii<n;ii++)
{
a[ii].ch=ii;
a[ii].to=NULL;
}
int i,j;
bian *s,*g;
for(ii=0;ii<e;ii++)
{
cout<<"逐一输入边的两端:"<<endl;
cin>>i>>j;
s=new bian;
s->data=j;
s->next=a[i].to;
a[i].to=s;
g=new bian;
g->data=i;
g->next=a[j].to;
a[j].to=g;
}
}
void zb::linjiebiao(int n)
{
cout<<"邻接表:"<<endl;
bian *s;
for(int i=0;i<n;i++)
{
s=a[i].to;
cout<<"V"<<i;
while(s!=NULL)
{
cout<<"->";
cout<<s->data;
s=s->next;
}
cout<<endl;
}
}
void zb::zhuanhuan(int n)
{
for(int i=0;i<n;i++)
for(int ii=0;ii<n;ii++)
A[i][ii]=0;
bian *s;
int g;
for(i=0;i<n;i++)
{
s=a[i].to;
while(s!=NULL)
{
g=s->data;
A[i][g]=1;
s=s->next;
}
}
}
void zb::linjiejuzhen(int n)
{
cout<<"转换后的邻接矩阵:"<<endl;
for(int i=0;i<n;i++)
{
for(int ii=0;ii<n;ii++)
cout<<A[i][ii]<<" ";
cout<<endl;
}
}
int main()
{
int m=0,n,e;
cout<<"无向图"<<endl;
cout<<"请输入点数(n<=10):";
cin>>n;
m=0.5*n*(n-1);
cout<<"请输入边数(e<="<<m<<"):";
cin>>e;
zb l(n,e);
cout<<endl;
l.linjiebiao(n);
cout<<endl;
l.zhuanhuan(n);
l.linjiejuzhen(n);
cout<<endl;
return 0;
}