Module: フロイドのアルゴリズム


Problem

1/10

フロイド: ザ・ビギニング (C++)

Theory Click to read/hide

Error

Problem

エッジに負でない重み (長さ) が割り当てられた有向グラフが与えられます。頂点 s から頂点 t までの最短パスの長さを求めます。
 
入力
最初の行には、グラフの頂点の数 N <50、頂点 s と t の数という 3 つの数値が含まれています。次にグラフの隣接行列、つまり各行に N 個の数値が含まれる N 行が来ます。隣接行列の i 行目の j 番目の数値は、i 番目の頂点から j 番目の頂点まで続くエッジの長さを指定します。長さは 0 ~ 1000000 の任意の値を取ることができ、数値 -1 は対応するエッジがないことを意味します。行列の主対角線上にゼロがあることが保証されます。
 
出力
単一の数値を出力します –最小パス長。パスが存在しない場合は、-1 を出力します。

<頭> <本体>
# 入力 出力
1
3 1 2
0 -1 3
7 0 1
2 215 0
218
Write the program below
#include <vector>
#include <iostream>
#include <climits>
using namespace std;

const int inf = INT_MAX;

int main()
{
	int n, s, t;
	cin >> n >> s >> t;
	vector<vector<int> > d(n + 1, vector<int>(n + 1,inf));
	for (int i = 0; i < n; ++i)
	{
		for (int j = 0; j < n; ++j)
		{
			int a;
			cin >> a;
			if (a != -1)
			{
				d[i + 1][j + 1] = a;
			}
		}
	}
	for (int k = 1; k <= n; ++k)
	{
		for (int i = 1; i <= n; ++i)
		{
			for (int j = 1; j <= n; ++j)
			{      
			}
		}
	}
	if (d[s][t] == inf)
	{
		cout << -1;
		return 0;
	}
	cout << d[s][t] << endl;

}      

     

Program check result

To check the solution of the problem, you need to register or log in!