【問題描述】
fj搭建了乙個巨大的用柵欄圍成的迷宮。幸運的是,他在迷宮的邊界上留出了兩段柵欄作為迷宮的出口,並且從迷宮中的任意一點都能找到一條走出迷宮的路。給定迷宮的寬 w 及長 h 和這個迷宮,然後計算從迷宮中最「糟糕」的那乙個點走出迷宮所需的最少步數。
【輸入格式】
第一行: w和h(用空格隔開)
第二行至第2*h+1行: 每行2*w+1個字元表示迷宮
【輸出格式】
輸出乙個單獨的整數,表示能保證牛從迷宮中任意一點走出迷宮的最小步數。
【輸入樣例】
5 3
+-+-+-+-+-+
| |
+-+ +-+ + +
| | | |
+ +-+-+ + +
| | |
+-+ +-+-+-+
【輸出樣例】
9 【資料範圍】
1 <= w <= 38
1 <= h <= 100
輸入有n*2+1行,每一行用gets輸入一串字元,然後遍歷『-』和『|』。
每遍歷到乙個就給圖架牆。構建完迷宮後列舉找兩個出口,多源bfs算出距離。
#include
#include
#include
#define maxn 305
using namespace std;
struct data
q[maxn*maxn
*maxn];
int n,m,t=1,front,rear,ans=0;
intx[5],y[5];
int dx=;
int dy=; //右,下,左,上
int mat[maxn][maxn][4]=; //右,下,左,上 注意對應dx和dy
int vis[maxn][maxn]=,d[maxn][maxn]=;
char s[200];
void in()
if(s[j]=='|')}}
//找出口
for(int j=1;j<=m;j++)
for(int i=1;i<=n;i++)
}void bfs()
; d[x[i]][y[i]]=1;
vis[x[i]][y[i]]=1;
}while(front!=rear);}
}}int main()
USACO 2 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的字元...