奇怪的问题,求大佬解答

P1219 [USACO1.5] 八皇后 Checker Challenge

lzlzl @ 2023-08-04 23:03:36

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int n,ans[15],cnt;
int a[15][15];
void eight(int step)
{
    if(step>n)
    {
        cnt++;
        if(cnt<=3)
        {
            for(int i=1;i<=n;i++)
                printf("%d ",ans[i]);
            printf("\n");
        }
        return;
    }
    for(int j=1;j<=n;j++)
    {
        if(a[step][j]>0) continue;
        else 
        {
            ans[step]=j;

            for(int i=step+1;i<=n;i++)
                a[i][j]++;

            int i1=step+1,j1=j-1;
            while(i1>0&&j1>0)
                a[i1++][j1--]++;

            int i2=step+1,j2=j+1;
            while(i2<=n&&j2<=n)
                a[i2++][j2++]++;

            /*for(int i3=1;i3<=n;i3++)
            {
                for(int j3=1;j3<=n;j3++)
                    cout<<a[i3][j3]<<" ";
                cout<<endl;
            }
            cout<<endl;*/
            eight(step+1);

            for(int i=step+1;i<=n;i++)
                a[i][j]--;

            i1=step+1,j1=j-1;
            while(i1>0&&j1>0)
                a[i1][j1]--;

            i2=step+1,j2=j+1;
            while(i2<=n&&j2<=n)
                a[i2][j2]--;
        }
    }
    return;
}
int main()
{
    cin>>n;
    for(int i3=1;i3<=n;i3++)
            {
                for(int j3=1;j3<=n;j3++)
                    cout<<a[i3][j3]<<" ";
                cout<<endl;
            }
            cout<<endl;
    eight(1);
    for(int i3=1;i3<=n;i3++)
            {
                for(int j3=1;j3<=n;j3++)
                    cout<<a[i3][j3]<<" ";
                cout<<endl;
            }
            cout<<endl;
    cout<<cnt;
    return 0;
}

以上是我的代码,有点冗长 先不考虑它的时间复杂度,但是它根本跑不起来,是为什么啊,一直都是死循环的状态 本蒟蒻希望把这个问题解决之后再改进


by Anoif @ 2023-08-09 09:15:43

我暂时没咋看懂,但是我有个排查代码的方法:在你认为有问题的地方进行一个排查输出,或许能明白内部运作如何

如果没帮上忙可以把我当空气……


|