Discuz! Board

 找回密码
 立即注册
查看: 539|回复: 1

23.2.18搜索2

[复制链接]

15

主题

19

帖子

4118

积分

论坛元老

Rank: 8Rank: 8

积分
4118

墨海马 Lv:15
发表于 2023-2-18 16:18:10 | 显示全部楼层 |阅读模式
[C] 纯文本查看 复制代码
void search3(int k)
{
	for(int i=1;i<n;i++)
	{
		if(s+i<=n&&i>=a1[k-1])
		{
			s+=i;
			a1[k]=i;
			if(s==n)
			{
				for(int j=1;j<k;j++)
				{
					cout<<a1[j]<<"+";
				}
				cout<<a1[k]<<endl;
			}
			else
			{
				search3(k+1);
			}
			s-=i;
		}
	}
}
void chaifen()//拆分
{
	cin>>n;
	a1[0]=1;
	search3(1);
}
bool check(int i,int j)
{
	for(int k=0;k<8;k++)
	{
		if(i==k||j==b[k]||abs(i-k)==abs(j-b[k])&&b[k]>=0)
		{
			return false;
		}
	}
	return true;
} 
void search4(int n)
{
	for(int k=0;k<8;k++)
	{
		if(check(k,n))
		{
			b[k]=n;
			if(n==8)
			{
				cnt++;
			}
			else
			{
				search4(n+1);
			}
			b[k]=-1;
		}
	}
}
void eightqueen()
{
	memset(b,-1,sizeof(b));
	search4(1);
	cout<<cnt;
}

回复

使用道具 举报

661

主题

847

帖子

243万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2435564

烈空座 Lv:100
发表于 2023-2-25 20:54:15 | 显示全部楼层
[C] 纯文本查看 复制代码
bool check(int i,int j)
{
    for(int k=0;k<8;k++)
    {
        if((i==k||j==b[k]||abs(i-k)==abs(j-b[k]))&&b[k]>=0)//?
        {
            return false;
        }
    }
    return true;
} 
void search4(int n)
{
    for(int k=0;k<8;k++)
    {
        if(check(k,n))
        {
            b[k]=n;
            if(n==7)//7 
            {
                cnt++;
            }
            else
            {
                search4(n+1);
            }
            b[k]=-1;
        }
    }
}
void eightqueen()//八皇后 
{
    memset(b,-1,sizeof(b));
    search4(0);//1
    cout<<cnt;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-5-30 12:23 , Processed in 0.066746 second(s), 33 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.. 技术支持 by 巅峰设计

快速回复 返回顶部 返回列表