用於計算地圖中起點到終點最短步長問題。
廣蒐時,偶爾會有疑惑,為什麼可以在標記地圖上直接標上步數?會不會有別的點廣蒐時步數更小的情況?答案當然是不會的,在初始情況時,一定要把所有初始點塞進佇列中,才能開始廣搜,這樣保證每一輪都穩定地往起始點外擴乙個步長,並且先標記到的格仔中記錄的一定是最短步長。
難得的休息日,小明起床時就已經 11 點多了,他常去的餡餅店一般 12 點就沒飯了,他需要趕緊洗漱,出門,然後去餡餅店吃飯,到了小區大門口他傻眼了,前幾天貼的修路公告成為了現實,現在小區門外已經成為工地,到處都是路障。小區門口到餡餅店的路形如乙個 n×m 的二維矩陣,能走的道路被標記成了 .,路障被標記成了 #,小區大門被標記成了 2,餡餅店被標記成了 3,小明可以在矩陣上上下左右移動,每移動一次代表走了一步,現求小明從小區門口最少走多少步才能到達餡餅店,若無法到達則輸出 −1。
#include
#include
using namespace std;
struct node
;int sx, sy;
char mmap[
505]
[505];
int dir[4]
[2]=
;int
main()
}}queue que;
que.
push
((node));
while
(!que.
empty()
)if(mmap[x]
[y]==
'.'));
//將可用節點壓入佇列}}
} cout <<-1
<< endl;
return0;
}
農民約翰有很多牛,他想交易其中一頭被don稱為騎士的牛。這頭牛有乙個獨一無二的超能力,在農場裡像騎士一樣地跳(就是我們熟悉的象棋中馬的走法)。雖然這頭神奇的牛不能跳到樹上和石頭上,但是它可以在牧場上隨意跳,我們把牧場用乙個 x,y
的座標圖來表示。
這頭神奇的牛像其它牛一樣喜歡吃草,給你一張地圖,上面標註了騎士的開始位置,樹、灌木、石頭以及其它障礙的位置,除此之外還有一捆草。現在你的任務是,確定騎士要想吃到草,至少需要跳多少次。騎士的位置用 k
來標記,障礙的位置用 ∗ 來標記,草的位置用 h
來標記。
#include
#include
using namespace std;
int dir[8]
[2]=
;//int sx, sy;
int n, m;
char mmap[
200]
[200];
struct node
;int
main()
);}}
}while
(!que.
empty()
)if(mmap[x]
[y]==
'.'));
mmap[x]
[y]=
'#';
//!!!注意關鍵}}
} cout <<-1
<< endl;
return0;
}
有乙個 n 行 m 列的棋盤( 1#include
#include
using namespace std;
int dir[8]
[2]=
;int sx, sy;
int n, m;
int mmap[
500]
[500];
struct node
;int
main()
);mmap[sx]
[sy]=-
1;while
(!que.
empty()
));}
}}for(
int i =
1; i <= n; i++
)else
if(mmap[i]
[j]==0)
else
} cout << endl;
}return0;
}年輕的拉爾夫開玩笑地從乙個小鎮上偷走一輛車,但他沒想到的是那車屬於警察局。並且車上裝有用於發射車子移動路線的裝置。那個裝置太舊了,以至於只能發射關於那輛車的移動路線的方向資訊。
通過使用一張小鎮的地圖,幫助警察局找到那車。表示出該車最終所有可能的位置。
小鎮的地圖是矩形的,上面的符號用來標明那兒可以行車和那兒不行。「.」
表示小鎮上那塊地方是可以行車的,符號 「x」 表示此處不能行車。拉爾夫所開小車的初始位置,用字元的 「∗」
,表示,且汽車能從初始位置通過。汽車能向四個方向移動:向北(上),南(下),西(左),東(右);拉爾夫所開小車的行動路線是通過一組給定的方向來描述的,在每個給定的方向,拉爾夫駕駛小車通過小鎮上的乙個或更多的可行車地點。
#include
#include
#include
using namespace std;
int dir[4]
[2]=
;char mmap[
100]
[100];
struct node
;int
main()
);}}
}int k, r;
//string dirc;
cin >> k;
//方向數
for(
int i =
0; i < k; i++
), qsize = que.
size()
;if(dirc ==
"north"
)else
if(dirc ==
"south"
)else
if(dirc ==
"east"
)else
if(dirc ==
"west"
)while
(que.
front()
.step == i)
); check[x]
[y]=1;
}//一定要加check!!!不然通不過一些用例}}
}while
(!que.
empty()
)//輸出地圖
for(
int i =
1; i <= n; i++
) cout << endl;
}return0;
}
面試筆試演算法目錄
尋找缺失的數字 二進位制中1的個數 位運算 檢測乙個數能否被3整除 位運算 判斷兩個數是否符號相反 位運算 數字轉字母的編碼方式的個數 dp 直方圖最大面積 dp 求最長上公升 下降子串行 o nlgn 尋找下乙個較大元素 利用棧 包含min函式的棧 利用棧 中綴表示式轉為字尾表示式 棧 tromi...
面試筆試演算法 euler
todo 大整數減法 除法 int a 1,b 1,c 2 斐波那契遞推 while int func int x return t raw long long ans,zero cnt,now 1 if num i 0 else if num i 13 0 else if zero cnt 0 a...
面試筆試演算法題練習一(列表逆數)
2019年某公司一道筆試題如圖 現在需要注意的問題 1.若人在樓棟中間,最少可以看見3棟樓 兩旁的樓 自身所在樓 若樓層無遮蓋,則可以看見更多。2.若人在兩邊界,則最少可以看見2棟樓 一旁的樓 自身所在樓 若樓層 無遮蓋,則可以看見更多。自己的錯誤思路1 簡單的計算逆數,只算有無遮蓋,忽略了若建築物...