当前位置: 代码迷 >> 综合 >> ACM Plan UVa - 10102 The path in the colored field
  详细解决方案

ACM Plan UVa - 10102 The path in the colored field

热度:86   发布时间:2023-10-15 12:36:13.0

Talk is cheap. Show me the code. —— Linus Torvalds

Hints:
曼哈顿距离:两点各轴坐标之差的和。
根据题目求出一个样例中,所有(1, 3)点对的最短曼哈顿距离之中最大的那个即可。

解析:
因为主人公是随机选取1号落脚点,那么任意1, 3之间的最短距离最大的那个即可代表答案,这样其他的1, 3之间的距离都只能小于这个值。

这道题我有试着用STL队列实现广度优先搜索来做,但却超时,可能队列操作成本总和太大了,有兴趣的可以自行实现一个队列来尝试。

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
const int MAX = 10010;
char arr[MAX][MAX];
int main()
{
        int n, minimum, max = -1, ans;    while(scanf("%d", &n) == 1)    {
    getchar();for(int i = 0; i < n; i++){
    for(int j = 0; j < n; j++)scanf("%c", &arr[i][j]);getchar();}max = -1;for(int i = 0; i < n; i++){
    for(int j = 0; j < n; j++){
    if(arr[i][j] == '1'){
    minimum = 99999999;for(int k = 0; k < n; k++){
    for(int l = 0; l < n; l++){
    if(k == i && l == j) continue;if(arr[k][l] == '3'){
    ans = abs(k - i) + abs(l - j);if(ans < minimum) minimum = ans;}}if(minimum > max) max = minimum;}}}printf("%d\n", max);   }return 0;
}                 
  相关解决方案