题目:
链接:点击打开链接
题意:
前19行中的第i行,给出i与n个城市连通的,然后同一行是这n个城市的序号。最后给出两个点,求 最短路。
思路:
Floyd求出每两个点之间的最短路。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define INF 100000000
int map[30][30];
int n,x;
int st,ed;
void floyd()
{
for(int k=1; k<=20; k++)
{
for(int i=1; i<=20; i++)
{
for(int j=1; j<=20; j++)
{
if(map[i][j] > map[i][k] + map[k][j])
map[i][j] = map[i][k] + map[k][j];
}
}
}
}
int main()
{
//freopen("input.txt","r",stdin);
int kase = 1;
while(scanf("%d",&n) != EOF)
{
for(int i=0; i<=20; i++)
{
for(int j=0; j<=20; j++)
map[i][j] = INF;
}
for(int i=1; i<=n; i++)
{
scanf("%d",&x);
map[1][x] = map[x][1] = 1;
}
for(int i=2; i<=19; i++)
{
scanf("%d",&n);
while(n--)
{
scanf("%d",&x);
map[i][x] = map[x][i] = 1;
}
}
floyd();
printf("Test Set #%d\n",kase++);
scanf("%d",&n);
while(n--)
{
scanf("%d%d",&st,&ed);
printf("%2d to %2d: %d\n",st,ed,map[st][ed]);
}
printf("\n");
}
return 0;
}
------------------------------------------------------------------------------------------
收获:
---->一种新的建图方式。。。。。
-----------------------------------------------------------------------------------------
战斗,从不退缩;奋斗,永不停歇~~~~~~~~~~~~~~~~~~~~~~