有一个程序调试了好久,希望大家能来看一下啊
下面这个程序我调试了半天了,但是还有逻辑错误,据我估计是void creatAdj(int *p1,int *p2)这个函数出了问题感谢高手们的指点啊,
#include <iostream>
using namespace std;
const int INF=1000;
const int N=100;
typedef struct node
{
int name;
struct node *next;
}dingDian;
int V,E;
dingDian *p=new dingDian[V];
dingDian *pv=new dingDian[V];//邻接表的表头
dingDian *pe=new dingDian[3*E];
double a[N][N];//邻接矩阵
void importData();//输入数据
void creatMatric(int *p1,int *p2,double *p3);//创建邻接矩阵
void creatAdj(int *p1);//创建邻接表
int search(int *t,int *r,int m,int *a);
void creatAdj(int *p1,int *p2);//创建邻接表
void outputMatric();//输出邻接矩阵
void outputAdj();//输出邻接表
void importData()//输入数据
{
cout<<"请输入顶点数: ";
cin>>V;
cout<<endl<<"请输入边数: ";
cin>>E;
cout<<endl;
int *p1=new int[E];
int *p2=new int[E];
double *p3=new double[E];
int i=0;
cout<<"--------请输入顶点的名称(用阿拉伯数字表示)-----------"<<endl;
cout<<"--顶点名称只能为0到总共的顶点数(如一共有5个顶点,则这5个顶点为:0,1,2,3,4)--"<<endl;
do
{
cout<<"请输入第"<<i+1<<"个顶点的名称: ";
cin>>(p+i)->name;
i++;
}while(i<V);
i=0;
do
{
cout<<"请输入第"<<i+1<<"条边及其权值(如a b 3): ";
cin>>*(p1+i);
cin>>*(p2+i);
cin>>*(p3+i);
i++;
}while(i<E);
creatMatric(p1,p2,p3);
creatAdj(p1,p2);
return;
}
void creatMatric(int *p1,int *p2,double *p3)//创建邻接矩阵
{
for(int i=0;i<V;i++)
{
for(int j=0;j<V;j++)
{
a[i][j]=INF;
}
}
for(int k=0;k<E;k++)
{
a[p1[k]][p2[k]]=p3[k];
a[p2[k]][p1[k]]=p3[k];
}
cout<<"创建邻接矩阵成功!"<<endl;
}
int search(int *t,int *r,int m,int *a)
{
int n=0;
for(int i=0;i<E;i++)
{
if(t[i]==m)
{
a[n]=r[i];
n++;
}
if(r[i]==m)
{
a[n]=t[i];
n++;
}
}
return n;
}
void creatAdj(int *p1,int *p2)//创建邻接表
{
int j=0;
int i=0;
while(i<V&&j<2*E)
{
int b[N]={0};
int n=search(p1,p2,i,b);
pv[i].name=p[i].name;
dingDian *pt=&pv[i];
int k=0;
while(k<n)
{
pe[j].name=b[k];
pt->next=&pe[j];
pt=pt->next;
k++;
j++;
}
pt->next=NULL;
i++;
}
cout<<"创建邻接表成功!"<<endl;
return;
}
void outputMatric()//输出邻接矩阵
{
for(int i=0;i<V;i++)
{
for(int j=0;j<V;j++)
{
cout<<a[i][j]<<"\t";
}
cout<<endl;
}
return;
}
void outputAdj()//输出邻接表
{
for(int i=0;i<V;i++)
{
dingDian *t=&pv[i];
cout<<t->name<<"\t";
do
{
t=t->next;
cout<<t->name;
}while(t->next!=NULL);
cout<<endl;
}
cout<<endl;
return;
}
int main()
{
char ch;
int i;
importData();
do
{
cout<<"-----------菜单栏----------------"<<endl;
cout<<"0.输出邻接矩阵"<<endl;
cout<<"1.输出邻接表"<<endl;
cout<<"你的选择是: ";
cin>>i;
if(i>=0&&i<=1)
{
switch(i)
{
case 0:outputMatric();break;
case 1:outputAdj();break;
}
}
else
{
cout<<"你的输入有误!"<<endl;
}
cout<<"你想要继续吗?(y/n): ";
cin>>ch;
}while(ch=='y');
delete []p;
delete []pv;
delete []pe;
return 0;
}