BFS總結經驗 馬踏棋盤 迷宮2

2021-09-11 06:46:27 字數 1827 閱讀 4916

bfs的基本模板:

c++示例模板:

vis[max][max]=;//標記陣列,要是走過這個點之後就標記為1

len[max][max]; //步數陣列,要是再進行一次while迴圈的時候len在上乙個點的時候值+1

map[n][m];//可能會設定成char陣列,根據題意來

n,m;//區域大小

分析:1.看題的時候抓住「最小步數」 這個關鍵點,我們可以知道,用bfs求解可能比較簡單。

2.根據模板敲出來乙個大致的樣子【就是bfs裡面的東西不寫,可以先把輸入給解決了】

3.主攻bfs:

(1)我們需要知道我們求的是什麼!

在迷宮的題目裡面我們需要求的是可以是到達那個地點的最小步數。

(2)我們要知道我們的每乙個陣列記錄的是什麼!

在迷宮裡面比較重要的是:len[max][max] 這個陣列代表的是在棋盤上面到達這個點所需要的步數

ps:要是無法到達某個點輸出零,這樣的求解我們可以先用memset(len,-1,sizeof(len));這個語句來講所有的陣列賦值為-1,                 再在bfs函式裡面的開始部分進行對初始點的賦值。

(3)比較麻煩的是,對於bfs類的題目,我們根本根本無法將題目意思和自己的知識想結合,也就是沒辦法舉一反三運用起                 來。

放**:

1.迷宮題

#include #include #include using namespace std;

int len[101][101];

char map[101][101];

int vis[101][101];

int dir[4][2] = ,,,};

int flag,n,m;

int startx,starty;

int ex,ey;

int sx,sy;

struct point

};void bfs(int sx,int sy)

q.push(point(tx,ty));}}

} return ;

}int main()

if(map[i][j]=='t')

} }bfs(sx,sy);

if(vis[ex][ey]) cout << len[ex][ey];

else cout << -1;

return 0;

}

2.馬踏棋盤

分析:同上,也就是輸出改變了一點,這次輸出的是len陣列的值,並按照一定的規則進行輸出。

我們可以利用bits/stdc++.h這個標頭檔案進行操作,這個標頭檔案包括了io流。

cout << left << setw(5) << len[tx][ty]

int n,m;

const int dx[4]=;

const int dy[4]=;

int len[401][401],vis[401][401];

struct point

};void bfs(int sx,int sy)}}

} }}int main()

cout << endl;

} return 0;

}

馬踏棋盤python 馬踏棋盤python實現

import collections import random class checkerboard object 初始化棋盤 def init self,len self.len len self.position has gone set def init checkerboard self ...

回溯演算法(馬踏棋盤)

近期學習了回溯演算法於是自己寫了馬踏棋盤的遞迴以及非遞迴方式的 theme 馬踏棋盤 回溯演算法 coder 秒針的聲音 time 2015.1.11 include include include define m 8 typedef struct nodehorse horse horse1 i...

馬踏棋盤演算法

為.c檔案 include include include define rows 8 define cols 8 int cheesboard rows cols const int movex 8 const int movey 8 初始化棋盤,將棋盤所有的位置賦值為0 void initboa...