穿越雷區 藍橋杯 DFS BFS

2022-05-03 12:24:21 字數 1930 閱讀 8526

題目描述

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

#include#include

#include

#include

#include

using

namespace

std;

int n,flag=0

;int vis[105][105

];char a[105][105

];int dir[4][2]=,,,};;

struct

node

;int check(int x,int

y)void bfs(int x,int

y) vis[tx][ty]=1

; node temp;

temp.x=tx;

temp.y=ty;

temp.step=now.step+1

; p.push(temp);}}

}}int

main()}}

bfs(s,e);

if(flag==0

) cout

<<-1

}//5//

a + - + -

//- + - - +

//- + + + -

//+ - + - +

//b + - + -

題解二:dfs

#include#include

#include

using

namespace

std;

int n,flag=0,mn=99999999

;int vis[105][105],dir[4][2]=,,,};

char a[105][105

];int check(int x,int

y)

}void dfs(int x,int y,int

cnt)

else}}

}int

main()}}

vis[x][y]=1

; dfs(x,y,0);

if(flag==0

) cout

<<-1

cout

//system("pause");

return0;

}

藍橋杯 穿越雷區

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

藍橋杯之穿越雷區 BFS

本題為2015年第六屆藍橋杯c語言a組試題,第4題。考點 廣度優先搜尋 bfs 廣搜一般用來解決 最短 最少 問題,需用到佇列。已知的地圖是乙個方陣,上面用字母標出了a,b區,其它區都標了正號或負號分別表示正負能量輻射區。例如 a b 坦克車只能水平或垂直方向上移動到相鄰的區。資料格式要求 輸入第一...

藍橋 穿越雷區

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