主题:关于最短路径的问题
下面程序有错误 实在是找不出了 希望好心人能帮我看一下 真是无比感谢
#include <iostream.h>
#include <string.h>
class BuildGraph
{
private:
int n,m;
int G[10][10],pt[10],j[10],k[10];
public:
void SetGraph()
{
int c=1;
cout<<"请输入顶点数与边数(规定范围为1-9)"<<endl;
cin>>n>>m;
while(n>9&&n<=0&&m>9&&m<0)
{
cout<<"(规定范围为1-9,请重新输入)"<<endl;
cout<<"请输入顶点数与边数(规定范围为1-9)"<<endl;
cin>>n>>m;
}
cout<<"请输入"<<n<<"个顶点的值(请用1-9数字代替)"<<endl;
for(int i=1;i<=n;i++)
{
cin>>pt[i];
}
for(i=1;i<=m;i++)
{
cout<<"请输入第"<<i<<"条边的边头,边尾和权值(依次输入)"<<endl;
cin>>j[c]>>k[c];
cin>>G[j[c]][k[c]];
c++;
}
}
void dijkstra()
{
int l[10],t[10];
int i,f=1,min,minloc;
int a,z,x;
int pre[10];
cout<<"\n请输入起始点:";
cin>>a;
cout<<"\n请输入结束点:";
cin>>z;
for(i=1;i<=9;i++)
{
if(i==a)
l[i]=0;
else
l[i]=10000;
t[i]=i;
}
while(f)
{
min=10000;
minloc=1;
for(i=1;t[i]<=9;i++)
{
if(t[i]>0)
if(l[i]<min)
{
min=l[i];
minloc=i;
}
}
t[minloc]=-1;
if(minloc==z)
f=0;
for(i=1;t[i]<=9;i++)
if(t[i]>0)
{
for(int c=1;c<=9;c++)
{
if(j[c]==minloc||k[c]==i)
{
if(G[minloc][i]!=0)
{
x=i;
if(l[x]>(l[minloc]+G[minloc][x]))
{
pre[x]=minloc;
l[x]=l[minloc]+G[minloc][x];
}
}
}
}
}
}
cout<<"最短路径的长度是:"<<l[z]<<endl;
cout<<z;
while(pre[z]!=a)
{
cout<<"<-"<<pre[z];
z=pre[z];
}
cout<<"<-"<<a;
}
};
void main()
{
BuildGraph bg;
bg.SetGraph();
bg.dijkstra();
}
#include <iostream.h>
#include <string.h>
class BuildGraph
{
private:
int n,m;
int G[10][10],pt[10],j[10],k[10];
public:
void SetGraph()
{
int c=1;
cout<<"请输入顶点数与边数(规定范围为1-9)"<<endl;
cin>>n>>m;
while(n>9&&n<=0&&m>9&&m<0)
{
cout<<"(规定范围为1-9,请重新输入)"<<endl;
cout<<"请输入顶点数与边数(规定范围为1-9)"<<endl;
cin>>n>>m;
}
cout<<"请输入"<<n<<"个顶点的值(请用1-9数字代替)"<<endl;
for(int i=1;i<=n;i++)
{
cin>>pt[i];
}
for(i=1;i<=m;i++)
{
cout<<"请输入第"<<i<<"条边的边头,边尾和权值(依次输入)"<<endl;
cin>>j[c]>>k[c];
cin>>G[j[c]][k[c]];
c++;
}
}
void dijkstra()
{
int l[10],t[10];
int i,f=1,min,minloc;
int a,z,x;
int pre[10];
cout<<"\n请输入起始点:";
cin>>a;
cout<<"\n请输入结束点:";
cin>>z;
for(i=1;i<=9;i++)
{
if(i==a)
l[i]=0;
else
l[i]=10000;
t[i]=i;
}
while(f)
{
min=10000;
minloc=1;
for(i=1;t[i]<=9;i++)
{
if(t[i]>0)
if(l[i]<min)
{
min=l[i];
minloc=i;
}
}
t[minloc]=-1;
if(minloc==z)
f=0;
for(i=1;t[i]<=9;i++)
if(t[i]>0)
{
for(int c=1;c<=9;c++)
{
if(j[c]==minloc||k[c]==i)
{
if(G[minloc][i]!=0)
{
x=i;
if(l[x]>(l[minloc]+G[minloc][x]))
{
pre[x]=minloc;
l[x]=l[minloc]+G[minloc][x];
}
}
}
}
}
}
cout<<"最短路径的长度是:"<<l[z]<<endl;
cout<<z;
while(pre[z]!=a)
{
cout<<"<-"<<pre[z];
z=pre[z];
}
cout<<"<-"<<a;
}
};
void main()
{
BuildGraph bg;
bg.SetGraph();
bg.dijkstra();
}