中南大學2018複試上機題目 逃離迷宮

2021-09-16 22:31:21 字數 2186 閱讀 4524

題目描述

給定乙個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...