求助大佬|蒟蒻搞不懂
查看原帖
求助大佬|蒟蒻搞不懂
429818
Smithespics楼主2023/3/15 17:20

问题点出现在DFS函数中一个很小的地方,关于函数中DFS中的类型定义。

using namespace std;
int n;
int st[23][23];
int path[400];
int arr[23][23];
int xx[23];
int yy[23];
int len = 0;
int fx,fy;
int dx[4] = {1,0,-1,0};
int dy[4] = {0,1,0,-1};

bool Judge()
{
    int sum = 0;
    for(int i = 1;i <= n;i++)
    {
        sum += xx[i];
        sum += yy[i];
    }
    return (sum == 0);
}

void DFS(int x,int y)
{
    if(x == fx && y == fy)
    {
        if(Judge())
        {
            for(int i = 0;i < len;i++)
                cout << path[i] << ' ';
        }
        return;
    }
    else
    {
        if(x == 1 && y == 1)
        {
            st[1][1] = 1;
            path[len++] = 0;
            xx[1]--;
            yy[1]--;
        }
        for(int i = 0;i < 4;i++)
        {

            int nx = x + dx[i],ny = y + dy[i];
            \\是的没错,问题点就在这里,我开始是是对nx和ny进行全局定义,但是程序结果一直报错不知道为什么,但是当我把int定义到DFS函数里面时,程序就能跑出来很神奇,但是不知道为什么崩溃了

            if(!st[nx][ny])
            {
                if(arr[nx][ny] && xx[nx] && yy[ny])
                {
                    st[nx][ny] = 1;
                    path[len++] = arr[nx][ny];
                    xx[nx]--;
                    yy[ny]--;
                    DFS(nx,ny);
                    st[nx][ny] = 0;
                    path[--len] = 0;
                    xx[nx]++;
                    yy[ny]++;
                }
            }
        }
    }
}

int main()
{
    cin >> n;
    for(int i = 1;i <= n;i++)
        cin >> yy[i];
    for(int i = 1;i <= n;i++)
        cin >> xx[i];
    for(int i = 1;i <= n;i++)
        for(int j = 1;j <= n;j++)
            arr[i][j] = n*(i-1) + (j-1);

    fx = n;
    fy = n;
    DFS(1,1);

    return 0;
}
2023/3/15 17:20
加载中...