Floyed 问题...莫名中....

lesky 2007-01-10 09:07:41
最近随手写了一个Floyed,对清华版数据结构书上的程序稍加改进,使之能输出起点到终点的路径,但是总是有些莫名的错误,调试了很久没搞出什么来...请大家帮忙看一下吧....

#include <cstdio>

#include <cstdlib>

#include <fstream>

#include <iostream>



using namespace std;



// 递归求解路径
void PrintPath(int *path, int begin, int end, int n){

if (*(path + begin*n + end) != 0){

PrintPath(path, begin, *(path + begin*n + end), n);

PrintPath(path, *(path + begin*n + end), end, n);

} else {

cout << begin << " -> " << end << endl;

}

}



template <typename T>

void Floyd(T *map, T *dist, int* path, int n){

int i, j, k;



for (i=0; i<n; i++)

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

*(dist + i*n + j) = *(map + i*n + j);

*(path + i*n + j) = 0;

}

for (k=0; k<n; k++)

for (i=0; i<n; i++)

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

if ( *(dist + i*n + k) && *(dist + k*n + j) &&

*(dist + i*n + k) + *(dist + k*n + j) < *(dist + i*n + j)){

*(dist + i*n + j) = *(dist + i*n + k) + *(dist + k*n + j);

// 从 i到j要经过k
*(path + i*n + j) = k;

}

}

}



int main(){

int *map, *dist;

int *path;

int i,j,n,k,h;

ifstream infile("map.txt");



map = new int[n*n];

dist = new int[n*n];

path = new int[n*n];



infile >> n;

for (i=0; i<n; i++)

for (j=0; j<n; j++)

infile >> *(map + i*n + j);

infile.close();



Floyd<int>(map, dist, path, n);



cout << "Begin:";

cin >> i;

cout <<"End:";

cin >> j;



cout << *(dist + i*n + j)<<endl;



PrintPath(path, i, j, n);



delete[] map;

delete[] dist;

delete[] path;

}

输入文件的内容
4

0 4 11 0

10 0 4 1

5 0 0 0

0 0 1 0

程序可能有很多不足希望大家指出.... 唉...
...全文
232 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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