卒的遍历,马的遍历

Problem Detail - 【基础】卒的遍历 - 追梦算法网

就是从左上到右下,只能向左向下走,输出可以走到的所有的路径

复制代码
#include<iostream>
using namespace std;
int n,m;
int sum;
struct data{
    int p,q;
}a[110];//代表每次步骤的坐标记录下来 
int g[100][110];
int dx[2]={1,0};
int dy[2]={0,1};
void dfs(int x,int y,int u)
{
    if(x==n&&y==m)
    {
        a[u].p=x;
        a[u].q=y;
        sum++;
        cout<<sum<<":"<<a[1].p<<","<<a[1].q;
        for(int i=2;i<=u;i++)
            cout<<"->"<<a[i].p<<","<<a[i].q;
        cout<<endl;
        return ;
    }
    a[u].p=x;
    a[u].q=y;
    g[x][y]=1;    
    for(int i=0;i<2;i++)
    {
        int xx=x+dx[i],yy=y+dy[i];
        if(xx>=1&&yy>=1&&xx<=n&&yy<=m&&!g[xx][yy])
        {
            dfs(xx,yy,u+1);
            g[x][y]=0;
        }
    }
}
int main(){
    cin>>n>>m;
    dfs(1,1,1);
    return 0;
}
/*
dfs要记录路径
每次搜索的深度,也就是每个步骤上,每次到达什么地方 

*/
复制代码

 Problem Detail - 【提高】马的遍历 - 追梦算法网

这个跟上一题基本上不变...

复制代码
#include<iostream>
using namespace std;
int n,m,sum;
struct data{
    int p,q;
}a[110];
int dx[4]={2,1,-1,-2};
int dy[4]={1,2,2,1};
int g[110][110];
void dfs(int x,int y,int u)
{
    if(x==4&&y==8)
    {
        a[u].p=x;
        a[u].q=y;
        sum++;
        cout<<sum<<":"<<a[1].p<<","<<a[1].q;
        for(int i=2;i<=u;i++)
            cout<<"->"<<a[i].p<<","<<a[i].q;
        cout<<endl;
        return ;
    }
    a[u].p=x;
    a[u].q=y;
    g[x][y]=1;
    for(int i=0;i<4;i++)
    {
        int xx=x+dx[i],yy=y+dy[i];
        if(xx>=0&&yy>=0&&xx<=4&&yy<=8&&!g[xx][yy])
        {
            dfs(xx,yy,u+1);
            g[x][y]=0;
        }
    }
} 
int main(){
    dfs(0,0,1);
    return 0;
}
/*
bfs是一层层开始扫荡
dfs是一条道走到黑
求方案数,走完了一条返回接着走 
dfs的参数一定要确定好 
*/
复制代码

 

posted @   小志61314  阅读(275)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示