題目描述
給定乙個m × n (m行, n列)的迷宮,迷宮中有兩個位置,小明想從迷宮的乙個位置走到另外乙個位置,當然迷宮中有些地方是空地,小明可以穿越,有些地方是障礙,她必須繞行,從迷宮的乙個位置,只能走到與它相鄰的4個位置中,當然在行走過程中,小明不能走到迷宮外面去。令人頭痛的是,小明是個沒什麼方向感的人,因此,她在行走過程中,不能轉太多彎了,否則她會暈倒的。我們假定給定的兩個位置都是空地,初始時,小明所面向的方向未定,她可以選擇4個方向的任何乙個出發,而不算成一次轉彎。小明能從乙個位置走到另外乙個位置嗎?
資料輸入
第1行為乙個整數t (1 ≤ t ≤ 100),表示測試資料的個數,接下來為t組測試資料,每組測試資料中,第1行為兩個整數m, n (1 ≤ m, n ≤ 100),分別表示迷宮的行數和列數,接下來m行,每行包括n個字元,其中字元'.'表示該位置為空地,字元'*'表示該位置為障礙,輸入資料中只有這兩種字元,每組測試資料的最後一行為5個整數k, x1, y1, x2, y2 (1 ≤ k ≤ 10, 1 ≤ x1, x2 ≤ n, 1 ≤ y1, y2 ≤ m),其中k表示小明最多能轉的彎數,(x1, y1), (x2, y2)表示兩個位置,其中x1,x2對應列,y1, y2對應行。
結果輸出
每組測試資料對應為一行,若小明能從乙個位置走到另外乙個位置,輸出「yes」,否則輸出「no」。
輸入示例
25 5
...**
*.**.
.....
.....
*....
1 1 1 1 3
5 5...**
*.**.
.....
.....
*....
2 1 1 1 3
輸出示例
noyes
解題報告:
仔細審題,題目先給出列號,後給出行號,運用深度遍歷,需要注意的是轉彎次數的判斷。
**如下
#include
#include
#define max 105
using namespace std;
char map[max][max];
int vis[max][max];
int m,n; //m行n列
int k,x1,y1,x2,y2;
int dir[2][4] = ,}; //表示上下左右方向對應的座標變化
int flag;
//深度遍歷,x y 表示當前所在位置,step表示當前轉了多少圈,d表示之前走的方向
void dfs(int x,int y,int step,int d)
if(step > k)
int i = 0; //表示方向
int nextx,nexty;
while(i < 4)
// printf("從(%d,%d)到(%d,%d)\n",x,y,nextx,nexty);
dfs(nextx,nexty,step,i);
//回溯,避免不同路徑之間產生影響
vis[nextx][nexty] = 0;
if(d != i && d != -1)
}
i ++;} }
//思路:每次讓機械人在上下左右四個方向嘗試,如果可以走,那麼就繼續走,
//並將訪問標誌變為1,同時比較是否超過指定步數和是否達到目的地,如果超過,則放棄不作處理
//如果沒有到達目的地,則重複上述操作
int main()
scanf("%d%d%d%d%d",&k,&y1,&x1,&y2,&x2); //注意先輸入了列,後輸入了行
// printf("k=%d,x1=%d,y1=%d,x2=%d,y2=%d\n",k,x1,y1,x2,y2);
dfs(x1,y1,0,-1); //-1表示第一步
if(flag == 1)else }}
return 0;
}最後,歡迎20考研同學加入20中南大學計算機考研群,群內有免費公共課資料,也有償提供專業課初試和複試歷年真題等資料,分享考研乾貨和研究僧生活,幫助大家在考驗道路上少走彎路。
中南大學複試上機 飯卡
時間限制 1 sec 記憶體限制 128 mb 題目描述 csu本部食堂的飯卡有一種很詭異的設計 在購買之前判斷餘額。如果購買乙個商品之前,卡上的剩餘金額大於或等於5元,就一定可以購買成功 即使購買後卡上餘額為負 否則無法購買 即使金額足夠 所以大家都希望盡量使卡上的餘額最少。某天,食堂中有n種菜 ...
中南大學複試上機 容易的題
時間限制 1 sec 記憶體限制 128 mb 題目描述 大家都很關心考試難易程度。k老師出題有乙個規律,在出題之前,他會隨機寫下乙個字元 串,只要這個字串中能按順序找到e,a,s,y四個字母。他出題就會比較簡單。你拿到了這個 字串,請你告訴考試的題目難不難吧。輸入輸入資料有多組,每組佔一行,由乙個...
中南大學複試上機 最短路徑
題目描述 小王和小明是好朋友,兩人最開始各有乙個初始位置 p 和乙個恆定速度 v,從0時刻起開始,他們從初始位置以恆定速度開始行走,請告訴我行走過程中兩人的最短距離是多少。輸入第一行輸入t代表測試樣例數目。對於每個樣例,第一行包含四個整數 x1,y1,x2,y2,表示人的起點 x1,y1 x2,y2...