【問題描述】
fj搭建了乙個巨大的用柵欄圍成的迷宮。幸運的是,他在迷宮的邊界上留出了兩段柵欄作為迷宮的出口,並且從迷宮中的任意一點都能找到一條走出迷宮的路。給定迷宮的寬 w 及長 h 和這個迷宮,然後計算從迷宮中最「糟糕」的那乙個點走出迷宮所需的最少步數。
【輸入格式】
第一行: w和h(用空格隔開)
第二行至第2*h+1行: 每行2*w+1個字元表示迷宮
【輸出格式】
輸出乙個單獨的整數,表示能保證牛從迷宮中任意一點走出迷宮的最小步數。
【輸入樣例】
5 3
+-+-+-+-+-+
| |
+-++-+
+ +| | | |
+ +-+-+
+ +| | |
+-++-+-+-+
【輸出樣例】
【資料範圍】
1 <= w <= 38
1 <= h <= 100
之前做過改題,順便把原題做了。
這道題輸入是一張圖,因為有空格,因此要用gets輸入,注意剛開始gets前處理輸入w,h後的換行符。在輸入中確定每個格仔的牆和兩個出口(處理有點麻煩,需要仔細),將兩個出口進入佇列後進行多源bfs求出最短路徑就得出答案。
#include
#include
#include
#include
using
namespace
std;
//0,1,2,3 東南西北;
int w, h, x, y, mat[102][102][4], vis[102][102], d[102][102];
int dx = ;
int dy = ;
char tu[101],empty;
struct data
;queue
a;int bfs()
); }
}return ans;
}int main()
else
if(tu[j]==' ')
if(i==2*h||i==0)
); //乙個出口
vis[x][y] = 1;
d[x][y] = 1;}}
}else
if(ok==2)
else
if(tu[j]==' ')
if(j==0||j==2*w)
); //另乙個出口
d[x][y] = 1;}}
}ok=3-ok;
}int ans = bfs(); //多源bfs
if(ans==0) printf("1");
else
printf("%d", ans);
return
0;}
USACO2 4 2 穿越柵欄
問題描述 fj搭建了乙個巨大的用柵欄圍成的迷宮。幸運的是,他在迷宮的邊界上留出了兩段柵欄作為迷宮的出口,並且從迷宮中的任意一點都能找到一條走出迷宮的路。給定迷宮的寬 w 及長 h 和這個迷宮,然後計算從迷宮中最 糟糕 的那乙個點走出迷宮所需的最少步數。輸入格式 第一行 w和h 用空格隔開 第二行至第...
USACO 2 4 2改 穿越柵欄 多源bfs
fj搭建了乙個巨大的用柵欄圍成的迷宮。幸運的是,他在迷宮的邊界上留出了兩段柵欄作為迷宮的出口,並且從迷宮中的任意一點都能找到一條走出迷宮的路。給定迷宮的行和列數和這個迷宮,然後計算從迷宮中最 糟糕 的那乙個點走出迷宮所需的最少步數。輸入格式 第一行為正數m和n,表示迷宮的行數和列數,用空格隔開。迷宮...
USACO Overfencing 穿越柵欄
農夫john 在外面的田野上搭建了乙個巨大的用柵欄圍成的迷宮。幸運的是,他在迷宮的邊界上留出了兩段柵欄作為迷宮的出口。更幸運的是,他所建造的迷宮是乙個 完美的 迷宮 即你能從迷宮中的任意一點找到一條走出迷宮的路。給定迷宮的寬w 1 w 38 及長h 1 h 100 2 h 1行,每行2 w 1的字元...