DFS搜索&&更新 为什么功能没有实现?
查看原帖
DFS搜索&&更新 为什么功能没有实现?
877860
Just_Love_You楼主2023/7/18 16:12
#include<iostream>
#include<cmath>
#include<bitset>
#include<cstring>
#include<iomanip>
#include<algorithm>
#include<map>
#include<set>
#include<deque>
#include<queue>
#include<stack>
#include<string>
#include<vector>
#include<utility>
#include<unordered_map>
#define endl '\n'
#define int long long
using namespace std;
const int N=1e3+10;
const int mod=1e9+7;
bool v[N][N];
int f[N][N];
int n,m;
int x,y;
int dx[8]={1,2,1,2,-2,-1,-1,-2};
int dy[8]={2,1,-2,-1,1,2,-2,-1};
void dfs(int x,int y,int num)
{
    for(int i=0;i<=7;i++)
    {

        if(x+dx[i]>=1&&x+dx[i]<=n&&y+dy[i]>=1&&y+dy[i]<=m)
        {
            if(v[x+dx[i]][y+dy[i]])
                f[x+dx[i]][y+dy[i]]=min(num,f[x+dx[i]][y+dy[i]]);
            else
            {
                v[x+dx[i]][y+dy[i]]=true;
                f[x+dx[i]][y+dy[i]]=num;
                dfs(x+dx[i],y+dy[i],num+1);
            }
        }

    }
}
void solve()
{
    cin >> n >> m;
    cin >> x >> y;
    memset(f,0x3f,sizeof f);
    v[x][y]=true;
    f[x][y]=0;
    dfs(x,y,1);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(v[i][j])
            cout << f[i][j] << ' ';
        else cout << -1 << ' ';
        }
        cout << endl;
    }
}
signed main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    // freopen("test.in", "r", stdin);
    // int o;
    // cin >> o;
    // while(o--)
    solve();
    return 0;
}
//
//⠀⠀⠀             ⠀⢸⣿⣿⣿⠀⣼⣿⣿⣦⡀
//⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠀⠀⠀ ⠀⢸⣿⣿⡟⢰⣿⣿⣿⠟⠁
//⠀⠀⠀⠀⠀⠀⠀⢰⣿⠿⢿⣦⣀⠀⠘⠛⠛⠃⠸⠿⠟⣫⣴⣶⣾⡆⠀⠀⠀
//⠀⠀⠀⠀⠀⠀⠀⠸⣿⡀⠀⠉⢿⣦⡀⠀⠀⠀⠀⠀⠀⠛⠿⠿⣿⠃⠀⠀⠀
//⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣦⠀⠀⠹⣿⣶⡾⠛⠛⢷⣦⣄⠀
//⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣧⠀⠀⠈⠉⣀⡀⠀⠀⠙⢿⡇
//⠀⠀⠀⠀⠀⠀⢀⣠⣴⡿⠟⠋⠀⠀⢠⣾⠟⠃⠀⠀⠀⢸⣿⡆
//⠀⠀⠀⢀⣠⣶⡿⠛⠉⠀⠀⠀⠀⠀⣾⡇⠀⠀⠀⠀⠀⢸⣿⠇
//⢀⣠⣾⠿⠛⠁⠀⠀⠀⠀⠀⠀⠀⢀⣼⣧⣀⠀⠀⠀⢀⣼⠇ 
//⠈⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⡿⠋⠙⠛⠛⠛⠛⠛⠁
//⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣾⡿⠋⠀
//⠀⠀⠀⠀⠀⠀⠀⠀⢾⠿⠋⠀
//
2023/7/18 16:12
加载中...