USACO 2 4 2 穿越柵欄

2021-07-15 01:25:40 字數 1446 閱讀 6887

【問題描述】

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