40分蒟蒻求助大佬QAQ
查看原帖
40分蒟蒻求助大佬QAQ
1112350
hzy_Q楼主2024/1/21 20:29
#include<bits/stdc++.h>
using namespace std;
bool vis[15];//vis[k]=true表示k条线存在
bool a[6][6];//a[i][j]=true表示当前位置有棋子
int n;
void dfs(int qizi,int weizhi);
int main()
{
	int ans=0;
	cin>>n;
	dfs(0,1);
	for(int i=1;i<=12;i++)
	{
		if(vis[i]) ans+=i;
	}
	cout<<ans;
	return 0;
}
void work()
{
	int cnt=0;
	bool tmp;
	for(int i=1;i<=5;i++)
	{
		tmp=true;
		for(int j=1;j<=5;j++)
		{
			if(!a[i][j])
			{
				tmp=false;
				break;
			}
		}
		if(tmp) cnt++;
	}
	for(int j=1;j<=5;j++)
	{
		tmp=true;
		for(int i=1;i<=5;i++)
		{
			if(!a[i][j])
			{
				tmp=false;
				break;
			}
		}
		if(tmp) cnt++;
	}
	tmp=true;
	for(int i=1;i<=5;i++)
	{
		if(!a[i][i])
		{
			tmp=false;
			break;
		}
	}
	if(tmp) cnt++;
	tmp=true;
	for(int i=1;i<=5;i++)
	{
		if(!a[i][5-i+1])
		{
			tmp=false;
			break;
		}
	}
	if(tmp) cnt++;
	vis[cnt]=true;
	return;
}
void dfs(int x,int cur)
{
	if(x==n)
	{
		work();
		return;
	}
	for(int t=cur+1;t<=25;t++)
	{
		a[(t-1)/5+1][(t-1)%5+1]=true;
		dfs(x+1,t);
		a[(t-1)/5+1][(t-1)%5+1]=false;
	}
	return;
}

求助大佬!!!!!!

2024/1/21 20:29
加载中...