八皇后问题

简单八皇后问题

#include<iostream>
#include<cstring>
using namespace std;

int visited[20][20]={false};
char pos[20][20];
int ans=0;

int search(int i,int j,int n,int m)//i是行,j是列
{
	if(i<0||i>=n||j<0||j>=m||visited[i][j]||pos[i][j]=='#')
		return 0;


	visited[i][j]=true;
	++ans;

	search(i-1,j,n,m);
	search(i+1,j,n,m);
	search(i,j-1,n,m);
	search(i,j+1,n,m);
	return ans;

}

int main()
{
	int n,m,num;
	int i,j;
	int s,t;
	cin>>m>>n;
	while(n!=0||m!=0)
	{
	    for(i=0;i<n;i++)
		{
		    for(j=0;j<m;j++)
			{
			    cin>>pos[i][j];
			    if(pos[i][j]=='@')
				{
				    s=i;
				    t=j;
				}
			}
		}
		num=search(s,t,n,m);
		cout<<num<<endl;
		ans=0;
		memset(pos,0,sizeof(pos));
		memset(visited, 0, sizeof(visited));
		cin>>m>>n;
	}
	return 0;
}

深度八皇后

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cstring>

using namespace std;

int p[30][30];
bool col[30]={0},le[30]={0},ri[30]={0};
int res=0;

void bfs(int row,int cnt)
{
	int i,lie;
	int ld,rd;
	if(row==8)
	{
		res=max(res,cnt);
		return;
	}
	for(lie=0;lie<8;lie++)
	{
		ld=row-lie+7;
		rd=row+lie;
		if(col[lie]==0&&le[ld]==0&&ri[rd]==0)
		{
			col[lie]=le[ld]=ri[rd]=1;
			bfs(row+1,cnt+p[row][lie]);
			col[lie]=le[ld]=ri[rd]=0;
		}
	}
	return;
}
int main()
{
	int k;
	int i,j;
	cin>>k;
	while(k--)
	{
	    for(i=0;i<8;i++)
		{
		    for(j=0;j<8;j++)
			{
			    cin>>p[i][j];
			}
			
		}
		res=0;
		memset(le,0,sizeof(le));
		memset(ri,0,sizeof(ri));
		memset(col,0,sizeof(col));
		bfs(0,0);
		printf("%5d\n",res);
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值