为什么运行的结果是负数呢?

cry3009 cry3009 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
求两点之间最短距离程序
#include <iostream.h>
#define INFTY 100000
template<class T>
class MGraph
{
public:
MGraph(int mSize)
{
n = mSize;
a = new int*[n];
for(int i=0;i<n;i++)
a[i] = new int[n];
}
~MGraph()
{
for(int i=0;i<n;i++)
delete[]a[i];
delete []a;
a = NULL;
}
void Floyd(T**& d, int **& path);
void setl(T**a1);
private:
T**a; //动态生成二维数组a,存储图的邻接矩阵
int n; //图中顶点数
};
template<class T>
void MGraph<T>::setl(T**a1)
{ //对邻接矩阵进行初始赋值
a = new int*[n];
for(int i=0;i<n;i++)
a[i] = new int[n];
for( i=0;i<n;i++)
for(int j=0;j<n;j++)
a[i][j] = a1[i][j];
}

template<class T>
void MGraph<T>::Floyd(T**& d, int **& path)
{
int i,j,k;
d= new T*[n];
path=new int *[n];
for(i=0;i<n;i++)
d[i]=new T [n];
path[i]=new int[n];
for(i=0;i<n;i++)
for (j=0;j<n;j++){
d[i][j]=a[i][j];
if (i!=j && a[i][j]<INFTY) path[i][j]=i;
else path[i][j]=-1;
}
for (k=0;k<n;k++)
for (i=0;i<n;i++)
for (j=0;j<n;j++)
if (d[i][k]+d[k][j] < d[i][j] )
{
d[i][j]=d[i][k]+d[k][j];
path[i][j]=path[k][j];
}
}
void main()
{
int n;
int **b;
int **d;
int **path;
cout<<"图中结点的个数为:"<<endl;
cin>>n;

b = new int*[n];
for(int i=0;i<n;i++)
b[i] = new int[n];


for( i=0;i<n;i++)
for(int j=0;j<n;j++)
{

if(i == j)
continue;
cout<<"点"<<i<<"到点"<<j<<"的权值为:";
cin>>b[i][j];
if(b[i][j] == 0)
b[i][j] = INFTY;

}

MGraph<int> f(n);
f.setl(b);
f.Floyd(d, path);
for(i=0;i<n;i++)
for(int j=0;j<n;j++)
{

cout<<"点"<<i<<"到点"<<j<<"的最短路径长度为:"<<d[i][j]<<endl;
cout<<"点"<<j<<"的直接前驱为:"<<path[i][j]<<endl;

}

}
...全文

相关推荐

评论 6
收藏 已收藏
分享
返回顶部
cry3009
C++ 语言 65,214 成员 250,514 内容