首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

OJ上一道最短路径的题(小弟我用dijkstra算法解答),总是wrong answer求大牛解答

2013-09-24 
OJ上一道最短路径的题(我用dijkstra算法解答),总是wrong answer求大牛解答题目如上,我的代码如下,用到的算

OJ上一道最短路径的题(我用dijkstra算法解答),总是wrong answer求大牛解答
OJ上一道最短路径的题(小弟我用dijkstra算法解答),总是wrong answer求大牛解答
OJ上一道最短路径的题(小弟我用dijkstra算法解答),总是wrong answer求大牛解答

题目如上,我的代码如下,用到的算法Dijkstra


#include <iostream>
using namespace std;

const int minDist = 0;
const int maxDist = -1;
const int maxArray = 205;

void dijkstra(int N, int v, long long *dist, int f[][maxArray]) {
  bool s[maxArray];
  for (int i = 0; i < N; ++i) {
    dist[i] = f[v][i];
s[i] = false;
//cout << i << "->" << dist[i] << ' ';
  }
  //cout << endl;
  dist[v] = 0;
  s[v] = true;
  for (int i = 1; i < N; i++) {
    long long temp = 2000000;
int u = v;
for (int j = 0; j < N; ++j) {
  if (!s[j] && dist[j] < temp && dist[j] != maxDist) {
    temp = dist[j];
u = j;
  }
}
//cout << "Time: " << i << ' ' << u << "->" << temp << endl; 
s[u] = true;
for (int j = 0; j < N; ++j) {
  if (!s[j] && f[u][j] != maxDist) {
    long long newDist = dist[u] + f[u][j];
    //cout << newDist << "  " << dist[j] << endl;
    dist[j] = dist[j] == maxDist ? newDist : dist[j];
dist[j] = dist[j] < newDist ? dist[j] : newDist;
  }
}
  }
}

int main() {
  int N, M;
  int f[maxArray][maxArray];
  long long dist[maxArray];
  int S, T;
  while (cin >> N) {
  cin >> M;
    for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++) {


  f[i][j] = maxDist;
}
    int a, b, length;
for (int i = 1; i <= M; i++) {
  cin >> a >> b >> length;
  if (f[a][b] == maxDist) {
    f[a][b] = f[b][a] = length;
  }
}
cin >> S >> T;
dijkstra(N, S, dist, f);
cout << dist[T] << endl;
  }
  return 0;
}


总是wrong answer,是不是有些边缘值没有考虑? 算法 dijkstra 最短路径 OJ?acm
[解决办法]
同一对城市之间有两条路怎么办

热点排行