题目:
Shipping Routes
代码:(AC)
#include<iostream>
#include<map>
#include<stdio.h>
#include<string.h>
using namespace std;
int m, n, p, d[35][35];
map<string, int>_map;
void Floyd()
{
for (int k = 1; k <= n; k++)
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
if (d[i][j] > d[i][k] + d[k][j])
d[i][j] = d[i][k] + d[k][j];
}
int main()
{
freopen("c:\\bailian\\1529.txt", "r", stdin);
int t;
cin >> t;
cout << "SHIPPING ROUTES OUTPUT" << endl << endl;
for (int cas = 1; cas <= t; cas++)
{
cout << "DATA SET " << cas << endl << endl;
cin >>n >> m >> p;
//输入点
for (int i = 1; i <= n; i++)
{
char str[4];
cin >> str;
_map[str] = i;
}
//输入边
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
d[i][j] =9999;
for (int i = 1; i <= m; i++)
{
int s, e;
char str1[4], str2[4];
cin >> str1;
cin >> str2;
s = _map[str1];
e = _map[str2];
d[s][e] = d[e][s] = 1;
}
//floyd
Floyd();
//
while (p--)
{
int num, s, e;
char str1[4], str2[4];
cin >> num;
cin >> str1;
cin >> str2;
s = _map[str1];
e = _map[str2];
if (d[s][e] == 9999)
{
cout << "NO SHIPMENT POSSIBLE" << endl;
}
else
{
cout << "$" << 100 * num*d[s][e] << endl;
}
}//while p
cout << endl;
if (cas == t)
cout << "END OF OUTPUT" << endl;
}//for case
return 0;
}