bfs 80 分 求题解
查看原帖
bfs 80 分 求题解
652419
zhaosi_0930楼主2022/7/27 23:04

80分,差四个点

用bfs推的,四个点超时

#include<iostream>
#include<cmath>
#include<iomanip>
#include<cstdio>
#include<cstring>
using namespace std;
int mi[25],cunchu[101],n;
bool mib[30];
bool b;
int sum,i;
void bfs(int step,int ht)
{
    if(b==true)
    {
        return;
    }
    if(sum==n)
    {
        b=true;
        for(int i=step-1;i>=1;i--)
        {
            printf("%d ",cunchu[i]);

        }
        return;
    }
    if(sum>n)
    {
        return;
    }

    for(int ij=1;ij<=ht;ij++)
    {
        if(mib[ij]==false)
        {
            cunchu[step]=mi[ij];
            sum+=cunchu[step];
            mib[ij]=true;
            bfs(step+1,ht);
            sum-=mi[ij];
            mib[ij]=false;
        }
    }

}

int main ()
{
	sum=1;
	cin>>n;
	if(n%2!=0)
    {
        printf("-1");
        return 0;
    }
	for(i=1;sum<n;i++)
	{
		sum*=2;
		mi[i]=sum;
	}
	sum=0;
	bfs(1,i);
	if(b==false)
    {
        printf("-1");
    }
	return 0;
}

求求啦【急】

2022/7/27 23:04
加载中...