題目描述
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 ...