洛谷1649 障礙路線

2022-05-07 10:45:07 字數 2328 閱讀 3348

歷經千辛萬苦,我總算是把這個水題ac了,現在心裡總覺得一萬隻草泥馬在奔騰;

這是一道很明顯的bfs,然後我也明顯的看出來了

但是,我就是wa了很久很久,在除錯第乙個晚上後,我發現讀入是存在空格的,而不是資料問題

然後第二個問題就是,bfs找到的第乙個終點不一定就是最優的答案(當然第二個問題是我重新打了一次猛然發現之前沒注意的一點)

注意到這兩點,其實這道題就沒難度了

然後這道題的處理需要注意乙個地方就是轉彎,有兩種方式來處理這個轉彎

二:開佇列,然後用結構體,結構體裡存乙個direction(方向),然後定義上下左右分別對應1,2,3,4,如果當前點的方向和下乙個拓展的方向相同,如果相同則拓展的方向沒轉彎

當然如果用陣列的話會有一點的麻煩,用佇列的話**難度小一點而且更方便不會超時,我之前用陣列也是超過時的,所以還是建議用佇列

ps:接下來這個**在洛谷上是可以過的,因為資料較水

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include

9#define maxn 105

10using

namespace

std;

1112

const

int dx=;

13const

int dy=;

1415

struct

node;

1819 queueq;

20int

n,map[maxn][maxn],vis[maxn][maxn];

21int sx,sy,fx,fy,ans=10002;22

23void

init()

2435

if(a=='a'

)38if(a=='b'

)41if(a=='x'

)44}45

} 46

47int

main()

48);

52while(!q.empty())

53);

64 }else

);66}67

}68}69

if(e.x==fx&&e.y==fy)72}

73if(ans<=10000)printf("%d"

,ans);

74else printf("-1"

);75 }

view code

但是仔細斟酌,如果是100*100的圖,而沒有障礙,那麼普通的佇列是會爆的,這個可以自己嘗試

所有改成優先佇列做

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include

9#define maxn 105

10using

namespace

std;

1112

const

int dx=;

13const

int dy=;

1415

struct

node

19};

2021 priority_queueq;

22int

n,map[maxn][maxn],vis[maxn][maxn];

23int sx,sy,fx,fy,ans=10002;24

25void

init()

2637

if(a=='a'

)40if(a=='b'

)43if(a=='x'

)46}47

} 48

49int

main()

50);

54while(!q.empty())

55);

66 }else

);68}69

}70}71

if(e.x==fx&&e.y==fy)76}

77if(ans<=10000)printf("%d"

,ans);

78else printf("-1"

);79 }

真·ac

這個**的區別就是優先佇列,和跳出語句,其中跳出的時候要注意特例,可能會存在到終點不用轉彎的線上的點的轉彎次數相同但是**到終點卻有轉彎和不轉彎的情況,,所以要特判乙個當現在的值會大於等於ans就跳出

特例。。。。a

。。。。。

。b 。。。

到b左邊的點時,轉彎一次,到b右邊的點時,轉彎一次,但是左邊點會多轉一次,所以要特判一下

洛谷 P3033 牛的障礙

本題的邊一定平行於座標軸,且同向的線段一定不重合,這是經典的二分圖建圖方法,本題要求的是最大不重合的線段數,那就是求二分圖的最大獨立集,最大獨立集 總點數 最大匹配數。本題有乙個坑點,就是輸入的資料不一定有序,也就是x1不一定比x2小 include include include include ...

洛谷 P2437 蜜蜂路線

乙隻蜜蜂在下圖所示的數字蜂房上爬動,已知它只能從標號小的蜂房爬到標號大的相鄰蜂房,現在問你 蜜蜂從蜂房m開始爬到蜂房n,m 輸入格式 輸入m,n的值 輸出格式 爬行有多少種路線 輸入樣例 1 複製 1 14輸出樣例 1 複製 377對於100 的資料,m,n le 1000m,n 1000 思路 斐...

洛谷 P2437 蜜蜂路線

乙隻蜜蜂在下圖所示的數字蜂房上爬動,已知它只能從標號小的蜂房爬到標號大的相鄰蜂房,現在問你 蜜蜂從蜂房 m 開始爬到蜂房 n m,有多少種爬行路線?備註 題面有誤,右上角應為 n 1 輸入 m,n 的值 爬行有多少種路線 輸入 1 1 14輸出 1377對於100 的資料,m,n le 1000 i...