求大佬帮忙调试,只过了第一个测试点
查看原帖
求大佬帮忙调试,只过了第一个测试点
348106
Dikkoo楼主2024/3/22 16:38
#include <iostream>
#include <vector>
using namespace std;

int n;
int tar[3][25];
int dir[4][2] = {{0,1}, {0,-1}, {1,0}, {-1,0}};
bool vis[25][25];
vector<int> route;

void dfs(int x, int y)
{
    if(x == n && y == n)
    {
        for(int i = 0; i < 2; i++)
            for(int j = 1; j <= n; j++)
                if(tar[i][j] != 0)
                    return;
        for(auto i : route)
            cout << i << ' ';
        exit(0);
    }

    for(int i = 0; i < 4; i++)
    {
        int xn = x + dir[i][0], yn = y + dir[i][1];
        if(!vis[xn][yn] && tar[0][yn] && tar[1][xn])
        {
            vis[xn][yn] = true;
            route.push_back((xn-1)*4 + yn-1);
            tar[0][yn]--; tar[1][xn]--;
            dfs(xn, yn);
            vis[xn][yn] = false;
            route.pop_back();
            tar[0][yn]++; tar[1][xn]++;
        }
    }
}

int main()
{
    cin >> n;

    for(int i = 0; i < 2; i++)
        for(int j = 1; j <= n; j++)
            cin >> tar[i][j];

    vis[1][1] = true;
    route.push_back(0);
    tar[0][1]--; tar[1][1]--;
    dfs(1, 1);

    return 0;
}
2024/3/22 16:38
加载中...