AC之uva750(代码改编自167)

思路:先把所有情况存入sum[99][10]中,

其中前一个代表第多少种情况(反正就92组嘛~)

第二个代表第几行,数字代表皇后在该行第几列

最后在main里找到满足情况就输出

最后就是格式了...这一题的格式有个坑就是第几组数据可能要设定只输出两位...

还有就是每行一个回车,最后一行没回车

-------------------------------------------------

#include <iostream>
#include <iomanip>
using namespace std;
void queen(int sum[][10])
{
    int a[10][10]= {0};
    int c[16]= {0},d[16]= {0};
    int t=0,x,y,flag=0;
    for(x=1; x<=8; x++)
    {
        if(flag==1)
        {
            break;
        }
        for(y=a[x][0]+1; y<=9; y++)
        {
            if(a[1][0]==8)
            {
                if(x==2&&y==7)
                {
                    flag=1;
                    break;
                }
            }


            if(y==9)
            {
                x--;
                int k=a[x][0];
                a[0][k]=0;
                c[x+k]=0;
                d[x-k+8]=0;
                a[x+1][0]=0;
                x--;
                break;
            }


            if(a[0][y]==0&&c[x+y]==0&&d[x-y+8]==0&&x==8)
            {
                for(int i1=1; i1<=7; i1++)
                {
                    sum[t][i1]=a[i1][0];
                }
                sum[t][8]=y;
                t++;
                x--;
                int k=a[x][0];
                a[0][k]=0;
                c[x+k]=0;
                d[x-k+8]=0;
                a[x+1][0]=0;
                x--;
                break;
            }


            if(a[0][y]==0&&c[x+y]==0&&d[x-y+8]==0&&x!=8)
            {
                a[0][y]++;
                a[x][0]=y;
                c[x+y]++;
                d[x-y+8]++;
                break;
            }


        }
    }
}


int main()
{
    int k,i;
    int sum[99][10]= {0};
    queen(sum);
    cin>>k;
    for(i=0; i<k; i++)
    {
        int x1,y1;
        cin>>y1>>x1;
        cout<<"SOLN       COLUMN"<<endl<<" #      1 2 3 4 5 6 7 8\n\n";
        int i1;
        int m=0;
        for(i1=0; i1<=91; i1++)
        {
            if(sum[i1][x1]==y1)
            {
                m++;
                cout<<setw(2)<<m<<"      ";
                for(int i2=1; i2<=7; i2++)
                {
                    cout<<sum[i1][i2]<<" ";
                }
                cout<<sum[i1][8]<<endl;
            }
        }
        if(i!=k-1)
            cout<<endl;
    }
    return 0;
}

-------------------------------------------------

错误历程:

1.原打算修改uva167找皇后源代码,并传入xy,限制这一位置必定有皇后,后来发现a[][0]会紊乱...

不知道啥时候删掉没用的a[][0],并且难以限制什么时候跳出循环

2.最后发现题目看错了。。。行列看错,存的sum也不对,当时内心一片灰暗,突然发现把输入改了就对了(中心对称大法好hhhh)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值