<。。。>为啥深搜出的结果不是升序排列的??

P1618 三连击(升级版)

战场原_黑仪 @ 2019-07-10 12:00:33

#include<iostream>
#include<cstdio>
using namespace std;
int a,b,c;
bool fl[10]={0};
int num[4]={0};
int all=0;
void make(int x)
{
    if(x>9)
{
    if(1.0*num[1]/a==1.0*num[2]/b&&1.0*num[1]/a==num[3]/c)
    printf("%d %d %d\n",num[1],num[2],num[3]);
    all++;
    return;
}
for(int i=1;i<=9;i++)
{
    if(fl[i]==true)
    continue;
    if(x%3==1)
    {
        num[(x/3)+1]+=i;
        fl[i]=true;
        make(x+1);
        fl[i]=false;
        num[(x/3)+1]-=i;
    }
    if(x%3==2)
    {
        num[(x/3)+1]+=i*10;
        fl[i]=true;
        make(x+1);
        fl[i]=false;
        num[(x/3)+1]-=i*10;
    }
    if(x%3==0)
    {
        num[x/3]+=i*100;
        fl[i]=true;
        make(x+1);
        fl[i]=false;
        num[(x/3)]-=i*100;
    }
}
}
int main()
{
cin>>a>>b>>c;
make(1);
if(all==0)
cout<<"No!!!";
return 0;
}

输“1 2 3”出

192 384 576

273 546 819

327 654 981

219 438 657


by 幻之陨梦 @ 2019-07-10 12:34:34

@Blackjack_A 不知道,但您可以深搜完之后在排列一下


by rui_er @ 2019-07-10 13:12:47

@Blackjack_A 不知道,能不能不要多次捞沉帖,霸占讨论页面


by Amor_Hucsy @ 2019-07-10 13:16:36

@Blackjack_A 大哥,第三遍了,求求您别再发了


by _H1kar1 @ 2019-07-10 13:39:48

三回啊,三回!


by 战场原_黑仪 @ 2019-07-10 14:08:50

第一次用讨论区,实在抱歉啊各位


by foxdemon @ 2019-07-10 14:57:31

@Blackjack_A 话说这道题不是模拟吗,干嘛dfs


by 战场原_黑仪 @ 2019-07-10 15:09:07

@foxdemon 之前另一个三连击我不是dfs的,时隔好几个月用一波dfs,结果。。


by 战场原_黑仪 @ 2019-07-10 15:16:14

@ZhanLang 再拍一遍的确能过,主要是这个深搜不按套路出牌有点蒙圈


by VTloBong @ 2019-07-17 17:38:36

你这个深搜不按套路出牌啊
本蒟蒻的dfsAC了......
看本蒟蒻的代码:

#include<stdio.h>
int a,b,c,num,book[10],t[10];
void dfs(int k) {
    if(k==10) {
        int x=t[1]*100+t[2]*10+t[3];
        int y=t[4]*100+t[5]*10+t[6];
        int z=t[7]*100+t[8]*10+t[9];
        if((x*b*c==y*a*c)&&(x*b*c==z*a*b)){
            printf("%d %d %d\n",x,y,z);
            num++;
        }
    }else{
        for(int i=1;i<=9;i++){
            if(book[i]==0){
                t[k]=i;
                book[i]=1;
                dfs(k+1);
                book[i]=0;
            }
        }
    }
}
int main(){
    scanf("%d%d%d",&a,&b,&c);
    dfs(1);
    if(num==0)printf("No!!!");
    return 0;
}

|