简单搜索题,乱搞做法求助
  • 板块题目总版
  • 楼主libu2333
  • 当前回复3
  • 已保存回复3
  • 发布时间2025/8/30 21:02
  • 上次更新2025/8/31 12:01:34
查看原帖
简单搜索题,乱搞做法求助
1475943
libu2333楼主2025/8/30 21:02

link,数据还没迁移。样例一直输出 0

懒得找原题了。

#include<bits/stdc++.h>
using namespace std;
int k,ans;
const int dx[]={0,0,-1,1},dy[]={-1,1,0,0};
bool st[10][10];
bool check(int x,int y){
    return x>=1&&x<=5&&y>=1&&y<=5;
}
bool can(int bx,int by,int mx,int my,int remain){
    int dist=abs(bx-mx)+abs(by-my);
    return dist<=remain;
}
void dfs(int bx,int by,int mx,int my,int remain){
    if(!can(bx,by,mx,my,remain)) return;
    if(bx==mx&&by==my&&remain==0){
        ans++;
        return;
    }
    for(int i=0;i<4;i++){
        int nbx=bx+dx[i],nby=by+dy[i];
        if(!check(nbx,nby)||st[nbx][nby]) continue;
        st[nbx][nby]=1;
        for(int j=0;j<4;j++){
            int nmx=mx+dx[j],nmy=my+dy[j];
            if(!check(nmx,nmy)||st[nmx][nmy]) continue;
            st[nmx][nmy]=1;
            dfs(nbx,nby,nmx,nmy,remain-2);
            st[nmx][nmy]=0;
        }
        st[nbx][nby]=0;
    }
}
int main(){
    cin>>k;
    int last=25;
    int x,y;
    while(k--){
        cin>>x>>y;
        st[x][y]=1;
        last--;
    }
    st[1][1]=st[5][5]=1;
    last-=2;
    dfs(1,1,5,5,last);
    cout<<ans<<endl;
}

回复请 @ 我。

2025/8/30 21:02
加载中...