题目链接:http://acm.timus.ru/problem.aspx?space=1&num=2005
| input | output |
|---|---|
0 2600 3800 2600 2500 2600 0 5300 3900 4400 3800 5300 0 1900 4500 2600 3900 1900 0 3700 2500 4400 4500 3700 0 |
13500 1 2 3 4 5 |
题意:
找最短路!且第3点不能在第四条路径!
代码如下:
#include <cstdio>
#include <cstring>
#define INF 0x3f3f3f3f
int a[7][7];
//void Floyd()
//{
// for(int k = 1; k <= 5; k++)
// {
// for(int i = 1; i <= 5; i++)
// {
// for(int j = 1; j <= 5; j++)
// {
// if(a[i][k]+a[k][j] < a[i][j])
// {
// a[i][j] = a[i][k]+a[k][j];
// }
// }
// }
// }
//}
int main()
{
for(int i = 1; i <= 5; i++)
{
for(int j = 1; j <= 5; j++)
{
scanf("%d",&a[i][j]);
}
}
// Floyd();
int ans = 0;
int r[7];
int minn = INF;
for(int i = 2; i <= 4; i++)//2
{
for(int j = 2; j <= 4; j++)//3
{
for(int k = 2; k <= 4; k++)//4
{
if(i!=j && i!=k && j!= k && k!=3)
{
int tt = a[1][i]+a[i][j]+a[j][k]+a[k][5];
if(tt < minn)
{
minn = tt;
r[2] = i, r[3] = j, r[4] = k;
}
}
}
}
}
printf("%d\n",minn);
printf("1 %d %d %d 5\n",r[2],r[3],r[4]);
return 0;
}URAL 2005. Taxi for Programmers (最短路 数学啊)
原文:http://blog.csdn.net/u012860063/article/details/43740253