欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

zufeoj_马的遍历

程序员文章站 2022-05-30 21:18:05
...

题目链接:http://acm.ocrosoft.com/problem.php?cid=1172&pid=50


题目描述

   中国象棋半张棋盘如图4(a)所示。马自左下角往右上角跳。今规定只许往右跳,不许往左跳。比如图4(a)中所示为一种跳行路线,并将所经路线打印出来。打印格式为:0,0->2,1->3,3->1,4->3,5->2,7->4,8…


zufeoj_马的遍历

输入

无输入

输出

输出上述棋盘的可以从(0,0)走到(4,8)点的方案数。


#include<iostream>
using namespace std;
int n,m;
bool vis[11][11];
int dir[4][2]={{1,2},{2,1},{-1,2},{-2,1}};
int ans=0;
void dfs(int x,int y){
	if(x==4&&y==8){
		ans++;
		return;
	}
	for(int i=0;i<4;i++){
		int xx=x+dir[i][0];
		int yy=y+dir[i][1];
		if(vis[xx][yy]==0&&xx>=0&&yy>=0&&xx<=4&&yy<=8){
			vis[xx][yy]=1;
			dfs(xx,yy);
			vis[xx][yy]=0;
		}
		
	}
}
int main(){
	vis[0][0]=1;
	dfs(0,0);
	cout<<ans<<endl;
	return 0;
}


#include<bits/stdc++.h>
using namespace std;
int mp[5][9];
int sum=0;
struct HORSE 
{
    int x;
    int y;
} ss[111]; 
int dir[4][2]={{-2,1},{-1,2},{1,2},{2,1}};
void dfs(int x,int y,int ans){
    if(x==4&&y==8){
        sum++;
        return;
    }
    for(int i=0;i<=4;i++){
        int xx=x+dir[i][0];
        int yy=y+dir[i][1];
         if(xx>=0 && xx<5 && yy>=0 && yy<9 && mp[xx][yy]==0)
        {
            mp[xx][yy]=1;
            ss[ans].x=xx;
            ss[ans].y=yy;
            ans++;
            dfs(xx,yy,ans);
            mp[xx][yy]=0;
            ans--;
        }
    }
}
int main(){
    mp[0][0]=1;
    dfs(0,0,1);
    cout<<sum<<endl;
    return 0;
}

相关标签: 搜索