/*馬在中國象棋以日字形規則移動。
請撰寫一段程式,給定n*m大小的棋盤,以及馬的初始位置(x,y),要求不能重復經過棋盤上的同一個點,計算馬可以有多少途徑遍歷棋盤上的所有點。
輸入
第一行為整數T(T < 10),表示測驗資料組數。
每一組測驗資料包含一行,為四個整數,分別為棋盤的大小以及初始位置坐標n,m,x,y。(0<=x<=n-1,0<=y<=m-1, m < 10, n < 10)
輸出
每組測驗資料包含一行,為一個整數,表示馬能遍歷棋盤的途徑總數,0為無法遍歷一次*/
#include<iostream>
#include<cstring>
using namespace std;
int board[11][11],X,Y;
bool isFull(int n,int m)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(board[i][j]==0)
return 0;
return 1;
}
void go(int n,int m,int x,int y,int& count)
{
if(x<1||x>n||y<1||y>m)
return ;
if(board[x][y]!=0)
return ;
board[x][y]=1;
if(isFull(n,m))
{
count++;
return;
}
go(n,m,x+2,y-1,count);
go(n,m,x+2,y+1,count);
go(n,m,x-2,y-1,count);
go(n,m,x-2,y+1,count);
go(n,m,x+1,y-2,count);
go(n,m,x+1,y+2,count);
go(n,m,x-1,y-2,count);
go(n,m,x-1,y+2,count);
board[x][y]=0;
}
int main()
{
int times=0;
cin>>times;
int n,m;
for(int i=0;i<times;i++)
{
cin>>n>>m>>X>>Y;
X++;
Y++;
memset(board,0,sizeof(board));
int count=0;
go(n,m,X,Y,count);
cout<<count<<endl;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/50702.html
標籤:基礎類
上一篇:C++Builder6 如何切換操作已經打開的幾個Excel檔案,求大神指點
下一篇:MATLAB代碼轉C的問題
