poj 1603 Risk 最短路
题意:给出20个国家的连接情况,然后求出连接2个目标国家的最少边数。
算法:转化为最短路问题。将每条边的权值设为1,“最少边数”即等价为“最短路”
View Code
#include <cstdio> #include <cstring> #include <iostream> using namespace std; #define re1(i,n) for(int i=1;i<=n;i++) const int maxn = 21; int map[maxn][maxn]; int main() { int n , m; int cas = 1; while(~scanf("%d",&n)) { re1(i,20) re1(j,20) map[i][j] = 100; while(n--) { scanf("%d",&m); map[1][m] = map[m][1] = 1; } for(int i=2;i<20;i++) { scanf("%d",&n); while(n--) { scanf("%d",&m); map[i][m] = map[m][i] = 1; } } re1(k,20) re1(i,20) re1(j,20) if(map[i][k] + map[k][j] < map[i][j]) map[i][j] = map[i][k] + map[k][j]; scanf("%d",&n); printf("Test Set #%d\n",cas++); while(n--) { int u , v; scanf("%d%d",&u,&v); printf("%d to %d: %d\n",u,v,map[u][v]); } printf("\n"); } return 0; }

浙公网安备 33010602011771号