关于floyd算法的一个问题

auzn1202 2004-09-18 12:03:37
我写了一floyd算法的实现计算一个29个顶点的图
程序如下
由于时间紧 所以写的比较乱 但是还是能够实现的
程序的第一部分如下(由于csdn说我的帖子太长,第2部分见我自己回复的第一个帖子)



#include<iostream.h>
#include<cstdio>
#include<conio.h>

class GraphAdjMatrix
{
private:
int vexNO,**path;
double **shortest, **arcweights;
int FloydResult();
int Input();
int input();
public:
int Floyd();
GraphAdjMatrix();
~GraphAdjMatrix();
int Creat();
};
/*int GraphAdjMatrix::Input()
{
//FIRE *fp;
//fp=fopen("e:\\ljjz.txt","r+");
cout<<"\nHow many Vertex:";
cin>>vexNO;
arcweights=new int *[vexNO];
if(arcweights==NULL) return 0;
for(int k=0;k<vexNO;k++)
{
arcweights[k]=new int[vexNO];
if(arcweights[k]==NULL) return 0;
}

for(int i=0;i<vexNO;i++)
{
for(int j=0;j<vexNO;j++)
{
cout<<"\narcweights["<<i<<"]["<<j<<"]";
cin>>arcweights[i][j];
}
}
for( i=0;i<vexNO;i++)
{
for(int j=0;j<vexNO;j++)
{
cout<<" "<<arcweights[i][j];
}
cout<<"\n";
}
//fclose(fp);
return 1;
} */

int GraphAdjMatrix::input()
{
vexNO=29;
arcweights=new double *[vexNO];
if(arcweights==NULL) return 0;
for(int k=0;k<vexNO;k++)
{
arcweights[k]=new double[vexNO];
if(arcweights[k]==NULL) return 0;
}
/*double arcweight[][4]=
{
0,2,3,32767,
2,0,7,32767,
3,7,0,12,
32767,32767,12,0
};*/
double arcweight[][29]=
{
0,83,32767,32767,32767,1784.6,32767,32767,32767,83,32767,32767,431.82,32767,32767,1132.9,32767,1083.1,32767,514.1,869.27,610.03,768.97,323.97,1076.2,32767,1423.2,1016.9,2048.8,
83,0,83,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,83,0,83,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,83,0,83,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,83,0,83,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
1784.6,32767,32767,32767,83,0,83,32767,32767,32767,32767,32767,1529.1,32767,32767,772.52,32767,1573.6,32767,1346.1,1359.2,2269.8,1258.9,1983.7,939.45,880.24,593.66,121.66,389.08,
32767,32767,32767,32767,32767,83,0,83,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,83,0,83,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,32767,83,0,83,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
83,32767,32767,32767,32767,32767,32767,32767,83,0,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,0,83,32767,32767,32767,83,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,83,0,83,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
431.82,32767,32767,32767,32767,1529.1,32767,32767,32767,32767,32767,83,0,83,32767,877.33,32767, 827.58,32767,258.52,613.69,916.95,513.39,630.89,820.58,761.37,1167.6,1525.8,1793.2,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,83,0,83,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,83,0,83,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,
32767,32767,32767,32767,32767,772.52,32767,32767,32767,32767,83,32767,877.33,32767,83.0,32767,921.27,32767,694.41,708.1,1619.3,607.8,1332,287.71,228.5,634.76,769.28,1036.7,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,0,83,32767,83,32767,32767,32767,32767,32767,32767,32767,32767,32767,
1083.1,32767,32767,32767,32767,1573.6,32767,32767,32767,32767,32767,32767,827.58,32767,32767,921.27,83,0,83,644.56,231.79,773.01,314.09,1021.3,864.52,805.3,1211.6,1570.4,1837.8,
32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,32767,83,0,83,32767,32767,32767,32767,32767,32767,32767,32767,32767,
514.1,32767,32767,32767,32767,1346.1,32767,32767,32767,32767,32767,32767,258.52,32767,32767,694.41,83,644.5683,0,430.77,999.23,330.47,713.17,637.66,578.45,984.71,1342.9,1610.3,
869.27,32767,32767,32767,32767,1359.2,32767,32767,32767,32767,32767,32767,613.69,32767,32767,708.1,32767,231.79,32767,430.77,0,32767,32767,32767,32767,32767,32767,32767,32767,
610.03,32767,32767,32767,32767,2269.8,32767,32767,32767,32767,32767,32767,916.95,32767,32767,1619.3,32767,773.01,32767,999.23,32767,0,32767,32767,32767,32767,32767,32767,32767,
768.97,32767,32767,32767,32767,1258.9,32767,32767,32767,32767,32767,32767,513.39,32767,32767,607.8,32767,314.09,32767,330.47,32767,32767,0,32767,32767,32767,32767,32767,32767,
323.97,32767,32767,32767,32767,1983.7,32767,32767,32767,32767,32767,32767,630.89,32767,32767,1332,32767,1021.3,32767,713.17,32767,32767,32767,0,32767,32767,32767,32767,32767,
1076.2,32767,32767,32767,32767,939.45,32767,32767,32767,32767,32767,32767,820.58,32767,32767,287.71,32767,864.52,32767,637.66,32767,32767,32767,32767,0,32767,32767,32767,32767,
32767,32767,32767,32767,32767,880.24,32767,32767,32767,32767,32767,32767,761.37,32767,32767,228.5,32767,805.3,32767,578.45,32767,32767,32767,32767,32767,0,32767,32767,32767,
1423.2,32767,32767,32767,32767,593.66,32767,32767,32767,32767,32767,32767,1167.6,32767,32767,634.76,32767,1211.6,32767,984.71,32767,32767,32767,32767,32767,32767,0,32767,32767,
1016.9,32767,32767,32767,32767,121.66,32767,32767,32767,32767,32767,32767,1525.8,32767,32767,769.28,32767,1570.4,32767,1342.9,32767,32767,32767,32767,32767,32767,32767,0,32767,
2048.8,32767,32767,32767,32767,389.08,32767,32767,32767,32767,32767,32767,1793.2,32767,32767,1036.7,32767,1837.8,32767,1610.3,32767,32767,32767,32767,32767,32767,32767,32767,0
};
for(int i=0;i<vexNO;i++)
for(int j=0;j<vexNO;j++)
arcweights[i][j]=arcweight[i][j];
return 1;
}





如果将
/*double arcweight[][4]=
{
0,2,3,32767,
2,0,7,32767,
3,7,0,12,
32767,32767,12,0
};*/
的/* */去掉
并且将下面的double arcweight[][29]
的附值注释掉 再将 上面的 vexNO=29;改成vexNO=4;
就没问题
可是一改回来就是死循环
请教大家 我错在哪里 了




...全文
145 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
auzn1202 2004-09-18
  • 打赏
  • 举报
回复
GraphAdjMatrix::GraphAdjMatrix()
{
vexNO=0;
arcweights=NULL;
shortest=NULL;
path=NULL;
}
GraphAdjMatrix::~GraphAdjMatrix()
{
for(int i=0;i<vexNO;i++)
delete arcweights[i];
delete [] arcweights;
for(i=0;i<vexNO;i++)
delete path[i];
delete [] path;
for(i=0;i<vexNO;i++)
delete shortest[i];
delete [] shortest;
vexNO=0;
}
int GraphAdjMatrix::Creat()
{
input();
shortest=new double *[vexNO];
if(shortest==NULL) return 0;
for(int k=0;k<vexNO;k++)
{
shortest[k]=new double[vexNO];
if(shortest[k]==NULL) return 0;
}
path=new int *[vexNO];
if(path==NULL) return 0;
for( k=0;k<vexNO;k++)
{
path[k]=new int[vexNO];
if(path[k]==NULL) return 0;
}
return 1;
}
int GraphAdjMatrix::FloydResult()
{
char str[5];
FILE *fp;
fp=fopen("e:\\zdlj.txt","w+");
for(int i=0;i<vexNO;i++)
{
for(int j=0;j<vexNO;j++)
{
cout<<"\n"<<i<<"-->"<<j<<":";
fputs("\n",fp);
sprintf(str,"%d",i);fputs(str,fp);
fputs("-->",fp);
sprintf(str,"%d",j);fputs(str,fp);
fputs(":",fp);
cout<<i<<"->";
sprintf(str,"%d",i);fputs(str,fp);
fputs("->",fp);
cout<<path[i][j];
sprintf(str,"%d",path[i][j]);fputs(str,fp);
int k=i;
while(path[k][j]!=j)
{
k=path[path[k][j]][j];
cout<<"->"<<path[k][j];
fputs("->",fp);
sprintf(str,"%d",k);fputs(str,fp);
}
cout<<"\n";
fputs("\n",fp);
}
cout<<"press any key to continue......";
char re;
cin>>re;
}
fclose(fp);
return 1;
}
int GraphAdjMatrix::Floyd()
{
for (int i=0; i<vexNO; i++)
for (int j=0; j<vexNO; j++)
{
shortest[i][j]=arcweights[i][j];
path[i][j]=j;
}
for (int k=0; k<vexNO; k++)
{
for (int i=0; i<vexNO; i++)
for (int j=0; j<vexNO; j++)
if((shortest[i][k]!=32767)&&(shortest[k][j]!=32767)&&(shortest[i][k]+shortest[k][j]<shortest[i][j]))
{
shortest[i][j] = shortest[i][k]+shortest[k][j];
path[i][j] = path[i][k];
}
}
FloydResult();
return 1;

}

int main()
{
GraphAdjMatrix G;
G.Creat();
G.Floyd();
return 1;
}
auzn1202 2004-09-18
  • 打赏
  • 举报
回复
对不起大家了
由于我紧张工作了很长时间
范了一些低级错误
现在改正过来了
写这个程序的时候没有考虑任何的时间复杂度和空间复杂度还有编程规范
可以说是惨不忍赌
大家见笑了
既然分数已经说出来了
我就看着给了啊
大家以后再 互相帮忙!!
falcon1210 2004-09-18
  • 打赏
  • 举报
回复
int Input();
int input();

不知为何编译不过啊
falcon1210 2004-09-18
  • 打赏
  • 举报
回复
floyd.obj : error LNK2001: unresolved external symbol "private: int __thiscall GraphAdjMatrix::input(void)" (?input@GraphAdjMatrix@@AAEHXZ)
Debug/floyd.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
falcon1210 2004-09-18
  • 打赏
  • 举报
回复
看,需要时间啊。
xujinwu77 2004-09-18
  • 打赏
  • 举报
回复
………………看玩笑啊??
auzn1202 2004-09-18
  • 打赏
  • 举报
回复
确实没有人能看出来么?
auzn1202 2004-09-18
  • 打赏
  • 举报
回复
请大家看看吧
谢谢了

64,652

社区成员

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

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