藍橋杯2015決賽 穿越雷區 bfs

2021-10-21 01:49:31 字數 3281 閱讀 2732

題目描述

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

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

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

例如:

a +-+

--+-

-+-+

++-+

-+-+

b +-

+-

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

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

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

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

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

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

樣例輸入

5

a +-+-

-+--

+-++

+-+-

+-+b +-+

-

樣例輸出

10
知識點:

gets()和scanf()的區別在於輸入的字串是否中間有空格:對於前者,只有遇到"\n"時才停止輸入,而對於後者,出現"\n"或空格都停止輸入。

ac**如下:

#include

#include

#include

using

namespace std;

const

int n =

110;

typedef pair<

int,

int>pii;

#define x first

#define y second

char g[n]

[n];

int dis[n]

[n];

bool st[n]

[n];

int n;

int dx=

, dy=

;int

bfs(pii start, pii end));

}}return-1

;}intmain()

;else

if(g[i]

[j]==

'b')

end =;}

}int distance =

bfs(start, end);if

(distance ==-1

) cout <<-1

<< endl;

else

cout << distance << endl;

return0;

}

錯誤**如下:

#include

#include

#include

using

namespace std;

const

int n =

110;

typedef pair<

int,

int>pii;

#define x first

#define y second

char g[n]

[n];

int dis[n]

[n];

bool st[n]

[n];

int n;

int dx=

, dy=

;int

bfs(pii start, pii end));

}}return-1

;}intmain()

;else

if(g[i]

[j]==

'b') end =;}

}int distance =

bfs(start, end);if

(distance ==-1

) cout <<-1

<< endl;

else

cout << distance << endl;

return0;

}

ac**如下:

#include

#include

using

namespace std;

const

int n =

110;

bool vis[n]

[n];

char g[n]

[n];

struct node

;int n;

int dx=

,dy=

;int

bfs(node s,node e)

for(

int i =

0;i<

4;i++);

q.push

(n);}}

return-1

;}intmain()

;if(g[i]

[j]==

'b')

e =;}

cout<<

bfs(s,e)

}

錯誤**如下:

下面這個**為什麼不行呢?因為int n兩次了,一次在main函式外,一次在main函式裡面,有時候寫**快的時候,容易發生這樣的錯誤,還比較難找到。

#include

#include

using

namespace std;

const

int n =

110;

bool vis[n]

[n];

char g[n]

[n];

struct node

;int n;

int dx=

,dy=

;int

bfs(node s,node e)

for(

int i =

0;i<

4;i++);

q.push

(n);}}

return-1

;}intmain()

;if(g[i]

[j]==

'b')

e =;}

cout<<

bfs(s,e)

}

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

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

藍橋杯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...

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

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