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

cry3009 2010-04-12 01:55:04
求两点之间最短距离程序
#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;

}

}
...全文
179 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cry3009 2010-04-13
  • 打赏
  • 举报
回复
很准确的答案啊。。。
呵呵。。。。
谢啦。。。。
lirg8405 2010-04-12
  • 打赏
  • 举报
回复
if(i == j)
continue;
当i等于j的时候,b[i][j];没有赋值
wer之路 2010-04-12
  • 打赏
  • 举报
回复
等待...自己先看看
cy330206 2010-04-12
  • 打赏
  • 举报
回复
楼主单步调试试试吧
wade_2003 2010-04-12
  • 打赏
  • 举报
回复
有可能是溢出了吧
soswaidao 2010-04-12
  • 打赏
  • 举报
回复
友情帮顶!!!

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧