UESTC 853 乙個簡單的走迷宮問題

2021-06-26 22:26:02 字數 2167 閱讀 5868

這是乙個網格迷宮問題,地圖的左上角為(0

,0) ,座標(i

,j) 表示

i 行

j 列。有乙個人,他在乙個迷宮裡,他要去乙個目標位置。他站在網格的交叉點上,障礙物在網格內部。他可以用不同的速度前進,每秒可以走

1 格到

3 格。也可以花費一秒的時間向左或向右轉。同時他不能撞到障礙物,也不能半個身體在地圖外面。現在,他最短要多少秒才能走到目標位置。人的體積是乙個半徑為

0.5 格的圓。

題目有多組測試資料。每組包含以下內容:

第一行包含兩個整數n,

m(0≤

n,m≤

50)。表示地圖的行數和列數。n,

m 為0 0時表示結束。

接下來n

行,每行包含

m 個

0 或

1 的整數。

1 表示障礙物,

0 表示沒有障礙物。

接下來一行包含

5 個整數,x1

,y1,

x2,y

2,w 。分別表示初始位置和目標位置,以及初始方向。0、

1、2、

3 分別表示上右下左。

題目保證輸入合法。

輸出僅包含乙個整數,如果無解輸出-1,否則輸出最短的時間(單位:秒)。

sample input

sample output

9 10

0 0 0 0 0 0 1 0 0 0

0 0 0 0 0 0 0 0 1 0

0 0 0 1 0 0 0 0 0 0

0 0 1 0 0 0 0 0 0 0

0 0 0 0 0 0 1 0 0 0

0 0 0 0 0 1 0 0 0 0

0 0 0 1 1 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

1 0 0 0 0 0 0 0 1 0

7 2 2 7 2

9 10

0 0 0 0 0 0 1 0 0 0

0 0 0 0 0 0 0 0 1 0

0 0 0 1 0 0 0 0 0 0

0 0 1 0 0 0 0 0 0 0

0 0 0 0 0 0 1 0 0 0

0 0 0 0 0 1 0 0 0 0

0 0 0 1 1 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

1 0 0 0 0 0 0 0 1 0

7 2 2 7 2

0 0

12

12

樣例如圖所示:(藍色點為出發點,紅色點為目標點,紅線為路徑)

狀態:1.向左轉 

2.向右轉

3.向此時的方向走1步

4.向此時的方向走2步

5.向此時的方向走3步

bfs

#include #include #include #include using namespace std;

int n,m;

int map[55][55];

bool vis[4][55][55];

struct node

for (int i=-1; i<4; i++)

if(i==0)

if(!vis[now.dr][now.x][now.y])

}else

if(next.dr==1) //向右走

if(next.dr==2) //向下走

if(next.dr==3) //向左走

//走i步過程中有一步走不通就不得行了

if(!judge(next.x, next.y) || map[next.x][next.y]==1)

if(!vis[next.dr][next.x][next.y])}}

}return -1;

}int main()

}if(j>=1)}}

}}

scanf("%d%d%d%d%d",&s.x,&s.y,&e.x,&e.y,&s.dr);

s.x--,s.y--,e.x--,e.y--;

s.step=0;

printf("%d\n",bfs());

}return 0;

}

乙個走迷宮的程式

本文給出乙個c語言版的走迷宮的程式。迷宮的寬和高,迷宮矩陣,迷宮的入口和出口從檔案讀入。程式首先讀入迷宮資料,然後顯示迷宮矩陣,最後呼叫迷宮搜尋程式找到乙個路徑,並輸出。1.迷宮的表示。迷宮用結構體matrix來表示 包括迷宮矩陣 迷宮的寬,迷宮的高,迷宮入口的座標,迷宮出口的座標。結構體定義如下 ...

乙個簡單的verlig程式 乙個簡單C程式的介紹

我們前面學了c語言的一些理論知識,今天通過乙個簡單的程式先來看一看c語言程式是什麼樣子。然後再對程式中的 進行介紹。這個語句的功能是進行有關的預處理操作。include稱為檔案包含命令,後面尖括號的內容稱為標頭檔案或首檔案。此處指包含stdio.h系統標頭檔案,在下面主函式中使用的printf 函式...

乙個簡單的Timer

關於system pause 的作用是暫停一下程式,等待按回車鍵繼續執行下一語句,類似getchar 的作用,不改變程式流程 system是呼叫dos的命令列,你還可以呼叫其他的命令,比如 system md d wang 這就是呼叫dos命令中的md命令,在d盤的根目錄下建立乙個資料夾,名字為wa...