BFS(記錄轉彎次數)

2021-10-24 13:04:53 字數 2440 閱讀 7117

題目鏈結

#include

using

namespace std;

char ma[

105]

[105];

int vis[

105]

[105];

int flag;

int dir[4]

[2]=

;int num;

int xx,x2;

int yy,y2,m,n;

struct nodes,t;

intbfs()

q1.turn = p.turn +1;

//乙個方向都走過了只能轉彎了

for(

int i =

0; i <

4; i++

) q1.x +

= dir[i][0

];q1.y +

= dir[i][1

];// cout << q1.x << q1.y << q1.turn << endl;}}

} flag =0;

return0;

}int

main()

scanf

("%d%d%d%d%d"

,&num,

&s.y,

&s.x,

&t.y,

&t.x)

;//因為題目中x代表列所以要反過來

s.x--

;s.y--

;t.x--

;t.y--;if

(ma[s.x]

[s.y]

=='*'

|| ma[t.x]

[t.y]

=='*'

) flag =0;

else

bfs();

if(flag ==0)

printf

("no\n");

else

printf

("yes\n");

}return0;

}

第二種題解

這種方式也容易理解,關鍵是有兩個坑,第乙個要用三維標記陣列,第二個為什麼在主函式裡面就要給定起點方向然後進行四個方向的bfs,這是為了避免可能出現特殊的情況而出現問題,具體樣例在**最後。

#include

using

namespace std;

char mp[

105]

[105];

bool vis[

105]

[105][

4];int n,m,k,dir[

2]=;

// struct node

// }s,t;

bool

check

(int x,

int y)

// int dir[4][2] = ;

// int n,m,k;

struct node

}s,t;

// bool check(int x,int y)

bool

bfs(

int d)

for(

int i =

0; i <

4; i++))

;else q.

push()

;//printf("%d asd%d %d %d %d\n",i,q.top().x,q.top().y,q.top().t,q.size());

// cout << xx << yy << xturn << endl;}}

return

false;}

intmain()

scanf

("%d%d%d%d%d"

,&k,

&s.y,

&s.x,

&t.y,

&t.x)

; s.x--

;s.y--

;t.x--

;t.y--;if

(mp[s.x]

[s.y]

=='*'

|| mp[t.x]

[t.y]

=='*'

)bool flag =

false

;for

(int i =

0; i <

4; i++)if

(flag)

printf

("yes\n");

else

printf

("no\n");

}return0;

}/*25 4

**.*

...*

.*.*

.*.*

...*

1 1 5 3 1

*/

POJ 1175 連連看(BFS 記錄轉彎次數)

連連看,並且連線不能從外面繞過去,第一反應是bfs。樣例過了以為挺簡單的,wa了兩個小時。1 首先,一上來我們可以先排除一些情況,起始或目標為0 起始和目標不相等 起始和目標在同一位置,這三種情況直接no 2 int dir 用來記錄每一點的方向,0,1,2,3分別對應上下左右 3 再用int ch...

最小轉彎問題(bfs)

涉及考點 bfs 寬度優先搜尋算 題目描述 給出一張地圖,這張地圖被分為 n m n,m 100 個方塊,任何乙個方塊不是平地就是高山。平地可以通過,高山則不能。現在你處在地圖的 x1,y1 這塊平地,問 你至少需要拐幾個彎才能到達目的地 x2,y2 你只能沿著水平和垂直方向的平地上行進,拐彎次數就...

BFS 最小轉彎問題

description 給出一張地圖,這張地圖被分為 n m n,m 100 個方塊,任何乙個方塊不是平地就是高山。平地可以通過,高山則不能。現在你處在地圖的 x1,y1 這塊平地,問 你至少需要拐幾個彎才能到達目的地 x2,y2 你只能沿著水平和垂直方向的平地上行進,拐彎次數就等於行進方向的改變 ...