藍橋杯2015決賽 穿越雷區(BFS求最短路)

2021-10-04 23:43:30 字數 1473 閱讀 8375

題目描述

x星的坦克戰車很奇怪,它必須交替地穿越正能量輻射區和負能量輻射區才能保持正常運轉,否則將報廢。

某坦克需要從a區到b區去(a,b區本身是安全區,沒有正能量或負能量特徵),怎樣走才能路徑最短?

已知的地圖是乙個方陣,上面用字母標出了a,b區,其它區都標了正號或負號分別表示正負能量輻射區。

例如:

a + - + -

- + - - +

- + + + -

+ - + - +

b + - + -

坦克車只能水平或垂直方向上移動到相鄰的區。

輸入輸入第一行是乙個整數n,表示方陣的大小, 4<=n<100

接下來是n行,每行有n個資料,可能是a,b,+,-中的某乙個,中間用空格分開。

輸入保證a,b都只出現一次。

輸出要求輸出乙個整數,表示坦克從a區到b區的最少移動步數。

如果沒有方案,則輸出-1

樣例輸入 copy

5

a + - + -

- + - - +

- + + + -

+ - + - +

b + - + -

樣例輸出 copy

10

思路:也就利用bfs,要穿越不同的雷區,-,+,所以也就相當於當前的這個的值不和前面穿過的乙個值相同。
1 #include 2 #include 3

using

namespace std;

4 constexpr size_t maxn = 2005;

5struct node

10 };

11bool book[maxn][maxn];

12int s1, s2, n;

13int mp[maxn][maxn];

14int ans;

15 queueq;

16bool judge(int x, int y)

17 20

void bfs()

2930

for(int i = -1; i <= 1; ++ i)

42 }

43 }

4445 }

46 cout << -1 << endl;

47 }

4849

5051

int main()

63if(a == 'b')

64 mp[i][j] = 4;

65if(a == '-')

66 mp[i][j] = 0;

67if(a == '+')

68 mp[i][j] = 1;

69 }

70 }

71 q.push();

72 book[s1][s2] = true;

73 bfs();

74 }

藍橋杯 2015決賽 穿越雷區(bfs

x星的坦克戰車很奇怪,它必須交替地穿越正能量輻射區和負能量輻射區才能保持正常運轉,否則將報廢。某坦克需要從a區到b區去 a,b區本身是安全區,沒有正能量或負能量特徵 怎樣走才能路徑最短?已知的地圖是乙個方陣,上面用字母標出了a,b區,其它區都標了正號或負號分別表示正負能量輻射區。例如 坦克車只能水平...

藍橋杯2015決賽 穿越雷區 bfs

題目描述 x星的坦克戰車很奇怪,它必須交替地穿越正能量輻射區和負能量輻射區才能保持正常運轉,否則將報廢。某坦克需要從a區到b區去 a,b區本身是安全區,沒有正能量或負能量特徵 怎樣走才能路徑最短?已知的地圖是乙個方陣,上面用字母標出了a,b區,其它區都標了正號或負號分別表示正負能量輻射區。例如 a ...

藍橋杯2015決賽 穿越雷區 (bfs)

一道題,居然卡在了輸入資料上,我去。搞了半天也不知道怎麼把資料完整的輸進去。這一次漲姿勢了。方向 int vis 105 105 標記是否走過 int n struct node queueq intbfs int x,int y for int i 0 i 4 i return 1 intmain...