自学内容网 自学内容网

1219:马走日

#include<bits/stdc++.h>
using namespace std;
int vis[8][2]={-2,1,-1,2,1,2,2,1,2,-1,1,-2,-1,-2,-2,-1};//构造偏移量数组
int t,n,m,x,y,ans;//棋盘总共由(n)(m)个点 
bool st[100][100];//如果st[i][j]==0 表示i,j这个坐标没有走过 st[a][b]==1表示a,b这个坐标走过 

void dfs(int x,int y,int cnt){
//出口 所有的点全部访问了
if(cnt==(n)*(m)) {
ans++;//按题操作 
return;
}
//深搜就是暴力枚举
for(int i=0;i<8;i++){
int tx=x+vis[i][0],ty=y+vis[i][1];
//判断是否合法:有没有越界、有没有走过
if(tx>=0&&tx<n&&ty>=0&&ty<m && st[tx][ty]==0){
//保存现场
st[tx][ty]=1;
dfs(tx,ty,cnt+1);
//还原现场 
st[tx][ty]=0; 
} 
} 
return;
} 

int main()
{
    cin>>t;
    while(t--){
    cin>>n>>m>>x>>y;
    //多组数据---》清空上轮数据对本轮的影响 
    memset(st,0,sizeof(st));
    ans=0;
    st[x][y]=1;
    dfs(x,y,1);
    cout<<ans<<endl;
}
return 0;
}


原文地址:https://blog.csdn.net/hls0611/article/details/140531088

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!