91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

回溯法解決迷宮問題

發布時間:2020-05-30 18:09:34 來源:網絡 閱讀:742 作者:清秋冷 欄目:編程語言

現在有迷宮地圖:(回溯法)

1 1 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1

0 0 0 1 1 1 1 1 1 1

1 1 0 1 1 1 1 1 1 1

1 1 0 1 1 1 1 1 1 1

1 1 0 1 1 1 1 1 1 1

1 1 0 0 0 0 0 0 1 1

1 1 0 1 1 1 1 0 1 1

1 1 0 1 1 1 1 0 1 1

1 1 0 1 1 1 1 1 1 1

  將迷宮地圖存于文件中,將文件里的信息依次讀入到二維數組中,設置入口,先將其壓棧,然后將其設置為2,以便于進行回溯操作,然后進行上下左右這四個方位的試探,如果試探到這個地方的值為0就滿足條件,先將其壓棧,再將其置為2,依次類推。如果第一次沒有找到通路則進行回溯操作,直到找到通路。

#define N 10

using namespace std;

struct Pos

{

int _row;

int _col;

};


void GetMaze(int* arr,int n)//將二維數組改成一維數組形式使用

{

FILE* fp=fopen("MazeMap.txt","r");

assert(fp);

for (int i = 0; i < n; i++)

{

for (int j = 0; j < n;)

{

char ch = fgetc(fp);

if (ch == '1' || ch == '0')

{

arr[i*n + j] = ch-'0';

j++;

}

else

{

continue;

}

}

}

}

void PrintMaze(int* arr, int n)

{

for(int i = 0; i < n; i++)

{

for (int j = 0; j < n; j++)

{

cout << arr[i*n + j] << " ";

}

cout << endl;

}

}

bool Isviable(int* arr, int n, Pos cur, int row,int col)//檢查相應位置是否為0

{

if (arr[n*row + col] == 0 && row < n&&row >= 0 && col < n&&col >= 0)

{

return true;

}

else

{

return false;

}

}

bool GetPath(int* arr,int n,const Pos& entry,stack<Pos>& path)

{

Pos cur = entry;

path.push(cur);

while (!path.empty())

{

arr[cur._row*n + cur._col] = 2;//將走過的路徑置為2

if (cur._row == n - 1)

{

return true;

}

//上

Pos next = cur;

next._row--;

if (Isviable((int*)arr, n, next, next._row, next._col))

{

cur = next;

path.push(cur);

continue;

}


//下

next = cur;

next._row++;

if (Isviable((int*)arr, n, next, next._row, next._col))

{

cur = next;

path.push(cur);

continue;

}

//左

next = cur;

next._col--;

if (Isviable((int*)arr, n, next, next._row, next._col))

{

cur = next;

path.push(cur);

continue;

}

//右

next = cur;

next._col++;

if (Isviable((int*)arr, n, next, next._row, next._col))

{

cur = next;

path.push(cur);

continue;

}

return false;

cur = path.top();//回溯

path.pop();

}

return false;//原路返回,并檢測出沒有通路

}

/***************************************/

void testMaze()

{

int arr[N][N] = {};

GetMaze((int*)arr, N);//將二維數組轉換成一維數組操作

PrintMaze((int*)arr, N);

stack<Pos> path;

Pos entry = { 2, 0 };//開始入口地方

cout<<GetPath((int*)arr, N,entry,path)<<endl;

PrintMaze((int*)arr, N);

}

回溯法解決迷宮問題

可以進行別的方案解決,遞歸法

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新密市| 册亨县| 绥阳县| 越西县| 衢州市| 松阳县| 都昌县| 常德市| 城固县| 额敏县| 灌云县| 抚顺市| 佛学| 买车| 桓仁| 遂溪县| 呼玛县| 静乐县| 绥德县| 临澧县| 锡林郭勒盟| 襄城县| 斗六市| 朝阳市| 永福县| 察雅县| 普兰店市| 宁阳县| 那坡县| 三穗县| 柞水县| 卓尼县| 托克托县| 调兵山市| 勃利县| 双鸭山市| 扬中市| 延长县| 安陆市| 信阳市| 广灵县|