歷經千辛萬苦,我總算是把這個水題ac了,現在心裡總覺得一萬隻草泥馬在奔騰;
這是一道很明顯的bfs,然後我也明顯的看出來了
但是,我就是wa了很久很久,在除錯第乙個晚上後,我發現讀入是存在空格的,而不是資料問題
然後第二個問題就是,bfs找到的第乙個終點不一定就是最優的答案(當然第二個問題是我重新打了一次猛然發現之前沒注意的一點)
注意到這兩點,其實這道題就沒難度了
然後這道題的處理需要注意乙個地方就是轉彎,有兩種方式來處理這個轉彎
二:開佇列,然後用結構體,結構體裡存乙個direction(方向),然後定義上下左右分別對應1,2,3,4,如果當前點的方向和下乙個拓展的方向相同,如果相同則拓展的方向沒轉彎
當然如果用陣列的話會有一點的麻煩,用佇列的話**難度小一點而且更方便不會超時,我之前用陣列也是超過時的,所以還是建議用佇列
ps:接下來這個**在洛谷上是可以過的,因為資料較水
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #includeview code9#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 }
但是仔細斟酌,如果是100*100的圖,而沒有障礙,那麼普通的佇列是會爆的,這個可以自己嘗試
所有改成優先佇列做
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include真·ac9#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 }
這個**的區別就是優先佇列,和跳出語句,其中跳出的時候要注意特例,可能會存在到終點不用轉彎的線上的點的轉彎次數相同但是**到終點卻有轉彎和不轉彎的情況,,所以要特判乙個當現在的值會大於等於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...