USACO2 4 2 穿越柵欄

2021-07-15 00:04:09 字數 1242 閱讀 4971

【問題描述】

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的字元...