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
程序可能有很多不足希望大家指出.... 唉...