圖的遍歷演算法-馬遍歷棋盤
題目
在n*m的棋盤中,馬只能走日子,馬從位置(x,y)處出發,把棋盤的每一點都走一次,且只走一次,找出所有的路徑。
demo實現
棋盤設定為5*4,初始位置設定為(0.0)
演算法重點
回溯
在遞迴後方將座標置為初始狀態0。
當路徑錯誤的時候,能夠把路徑恢復到走之前的狀態。
具體的實現,在註釋中已經寫得比較清楚。
#include<iostream>
using namespace std;
//座標固定的馬有八種走的方式
//用陣列進行儲存,方便在for中使用
int fx[8]= {1,2,2,1,-1,-2,-2,-1};
int fy[8]= {2,1,-1,-2,-2,-1,1,2};
static int mCount;
const static int n=5,m=4;
int a[n][m]; //用int二維陣列來表示走的路勁
void mFind(int x,int y,int dep);//尋找路徑的遞迴
int mCheck(int x,int y);//判斷座標是否出界,是否已經走過
void output();//列印路徑
int main()
{
int x=0,y=0;//選擇(0,0)為初始點
mCount=0;
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
a[i][j]=0;
a[x][y]=1;
mFind(x,y,2);
if(mCount==0)
cout<<"Non solution"<<endl;
else
cout<<endl<<"final count = "<<mCount<<endl;
}
void mFind(int x,int y,int dep)
{
int xx,yy;
for(int i=0; i<8; i++)
{
xx=x+fx[i];
yy=y+fy[i];
if(mCheck(xx,yy)==1)
{
a[xx][yy]=dep;
if(dep==n*m)
output(); //如果深度為n*m,那麼表示遍歷結束,就列印
else
mFind(xx,yy,dep+1);
a[xx][yy]=0; //回溯,恢復未走座標。(如果走錯,要將走錯的路徑還原)
}
}
}
int mCheck(int x,int y)
{
//判斷座標是否出界,是否已經走過
if(x<0||y<0||x>=n||y>=m||a[x][y]!=0)
return 0;
return 1;
}
void output()
{
mCount++;
cout<<endl;
cout<<"count= "<<mCount;
for(int i=0; i<n; i++)
{
cout<<endl;
for(int j=0; j<m; j++)
cout<<a[i][j]<<" ";
}
}
相關文章
- Python字典的遍歷,包括key遍歷/value遍歷/item遍歷/Python
- js的map遍歷和array遍歷JS
- 圖論演算法遍歷基礎圖論演算法
- 二叉樹的建立、前序遍歷、中序遍歷、後序遍歷二叉樹
- 資料結構與演算法——二叉樹的前序遍歷,中序遍歷,後序遍歷資料結構演算法二叉樹
- jQuery遍歷函式,javascript中的each遍歷jQuery函式JavaScript
- 《啊哈!演算法》第5章 圖的遍歷演算法
- 二叉樹建立,前序遍歷,中序遍歷,後序遍歷 思路二叉樹
- TDictionary 的 遍歷
- jQuery的遍歷結構設計之遍歷同胞jQuery
- jQuery的遍歷結構設計之遍歷祖先jQuery
- Python演算法:遍歷Python演算法
- jQuery 遍歷jQuery
- 遍歷 FlowDocument
- Javascript樹(一):廣度遍歷和深度遍歷JavaScript
- 二叉樹的廣度遍歷和深度遍歷()二叉樹
- 二叉樹的遍歷演算法【和森林的遍歷】【PHP 原始碼測試】二叉樹演算法PHP原始碼
- JS中的遍歷JS
- DOM元素的遍歷
- JavaScript 中的遍歷JavaScript
- 樹的遍歷方式
- Collection集合的遍歷
- JS 物件的遍歷JS物件
- 陣列遍歷陣列
- 資料遍歷
- jQuery 遍歷方法jQuery
- jQuery 遍歷 – 祖先jQuery
- Java遍歷PropertiesJava
- 圖的遍歷演算法-七巧板塗色演算法
- 《圖論》——廣度優先遍歷演算法(BFS)圖論演算法
- 二叉樹的遍歷 → 不用遞迴,還能遍歷嗎二叉樹遞迴
- Matlab對資料夾的層次遍歷和深度遍歷Matlab
- 廣度優先遍歷圖解圖解
- 程式碼隨想錄演算法訓練營,9月9日 | 二叉樹遞迴遍歷,迭代遍歷,層序遍歷演算法二叉樹遞迴
- 非遞迴實現先序遍歷和中序遍歷遞迴
- JS遍歷物件的方式JS物件
- 微信小程式的遍歷微信小程式
- 深入JS物件的遍歷JS物件