C的迷宮問題

時間 2021-10-30 06:09:38

1樓:匿名使用者

1.回溯演算法

7. 迷宮問題

給一個20×20的迷宮、起點座標和終點座標,問從起點是否能到達終點。

輸入資料:』.』表示空格;』x』表示牆。

程式如下:

#include

#include

void search(int,int);

int canplace(int,int);

void readdata(); //讀入資料

void printresult(); //列印結果

int a[20][20]; //a陣列存放迷宮

int s,t;

int main()

void search(int row, int col)

void printresult()

}void readdata()

}int canplace(int row, int col)

2.搜尋演算法

如下圖12×12方格圖,找出一條自入口(2,9)到出口(11,8)的最短路徑。

抱歉,圖案貼上不上

本題給出完整的程式和一組測試資料。狀態:老鼠所在的行、列。程式如下:

#include

void readdata(); //讀入資料

void init(); //初始化

int search(); //廣搜,並在每一個可到達的每一個空格出填上最小步數

int emptyopen(); //判棧是否為空:空:1;非空:0。

int takeoutofopen(); //從棧中取出一個元素,並把該元素從棧中刪除

int canmoveto(int,int,int*,int*,int); //判能否移動到該方向,並帶回座標(r,c)

int isaim(int row, int col); //判斷該點是否是目標

int used(int,int); //判斷該點是否已經走過

void addtoopen(int,int); //把該點加入到open表

int a[12][12]; //a存放迷宮,0表示空格,-2表示牆。

//廣搜時,未找到目標以前到達的空格,填上到達該點的最小步數

int n; //n為迷宮邊長,注:若大於12,必須修改一些引數,如a的大小

int open[20],head,tail,openlen=20; //open表

int s,t; //起點和終點

int main()

int search()}}

}}int emptyopen()

int takeoutofopen()

u=open[head++];

head=head%openlen;

return(u);

}int canmoveto(int row, int col, int *p, int *q, int direction)

*p=r;

*q=c;

if(r<0||r>=n||c<0||c>=n) //如果越界返回0

return(0);

if(a[r][c]==0) //如果是空格返回1

return(1);

return(0); //其餘情況返回0

}int isaim(int row, int col)

int used(int row, int col)

void addtoopen(int row, int col)

void readdata()

}void init()

測試資料如下:

12 10 7 1 8

************

x......x.***

x.x.xx.....x

x.x.xx.***.x

x.x.....x..x

x.*********x

x...x.x....x

x.***...***x

x.....x....x

***.***x.x.x

******x..***

************

關於C 迷宮問題,尋找一條通路穿越迷宮(找到一條即可)。要求寫出遞迴程式來穿越迷宮

夢幻 題目有問題 如何指定迷宮的起點和終點。我這裡假設迷宮某個邊界位置是起點,x,y 是否是終點要用gotgoal x,y 函式判斷。核心函式 void dfs char m,int height,int width,int x,int y,int now dir 這裡m是一個一維陣列,表示迷宮。格...

C語言問題,C語言問題C語言問題

選a首先,空格也是一種字元,b d選項分別把空格賦給了c1,c1 其次,c選項不完整,排除 不僅a這樣,10a20b也是可以的。 聽不清啊 答案a 10a 20b cr 是正確的。因為scanf d c 時,會忽略數字前面的空格,遇到非數字字元就會結束讀取 非數字字元會留待下一次讀取,即被後面的 c...

C語言問題,C語言報錯的問題?

一季忘川 printstar 返回值為void a是int變數,不能這樣賦值 這樣就好了 void printstar main 給你個呼叫函式賦值的例子int add int a,int b int main 若影蝸牛 printstar 函式,返回值為void,不能賦值給int型的a 在prin...