• 85 王、后传说


    85 王、后传说

    作者: turbo时间限制: 1S章节: 递归

    问题描述 :

    地球人都知道,在国际象棋中,后如同太阳,光芒四射,威风八面,它能控制横、竖、斜线位置。

    看过清宫戏的中国人都知道,后宫乃步步惊心的险恶之地。各皇后都有自己的势力范围,但也总能找到相安无事的办法。

    所有中国人都知道,皇权神圣,伴君如伴虎,触龙颜者死......

    现在有一个n*n的皇宫,国王占据他所在位置及周围的共9个格子,这些格子皇后不能使用(如果国王位于王宫的边缘,占用的格子可能不到9个)。当然,皇后也不会攻击国王。

    现在知道了皇宫的规模n,国王的位置(x,y)(国王位于第x行第y列,行和列号从1开始),请问,有多少种方案放置n个皇后,使她们不能互相攻击(同一横线、竖线、斜线上只能有一个皇后)。

    输入说明 :

    输入仅一行,包含三个整数,表示皇宫的规模n(n<=12)及国王的位置x和y坐标。

    输出说明 :

    一个整数,表示放置n个皇后的方案数

    输入范例 :
    8 2 2
    输出范例 :
    10

    #include <iostream>
    using namespace std;
    int martix[13][13] = { 0 };
    int n;
    int step = 0;
    bool check(int x, int y)
    {
    	for (int i = 1; i < x; i++)//该列是否有皇后
    	{
    		if (martix[i][y] == 2)
    			return false;
    	}
    	for (int i = 0; i < y; i++)//行
    	{
    		if (martix[x][i] == 2)
    			return false;
    	}
    	int y1 = y-1, y2 = y+1;
    	for (int i = x - 1; i >= 1; i--)
    	{
    		if (y1 >= 1 && martix[i][y1] == 2)
    			return false;
    		else
    			y1--;
    		if (y2<=n&&martix[i][y2]==2)
    			return false;
    		else
    			y2++;
    	}
    	return true;
    }
    void dfs(int x)//index行
    {
    	if (x == n + 1)
    	{
    		step++;
    		return;
    	}
    	for (int y = 1; y <= n; y++)
    	{
    		if (martix[x][y] == 1)//是否为国王
    			continue;
    		if (check(x, y))
    		{
    			martix[x][y] = 2;
    			dfs(x + 1);
    			martix[x][y] = 0;
    		} 
    	}
    }
    int main()
    {
    	int  x, y;
    	cin >> n >> x >> y;
    	int x1, y1, x2, y2;
    	x1 = x2 = x; y1 = y2 = y;
    	if (x1 - 1 >= 1)x1--;
    	if (y1 - 1 >= 1)y1--;
    	if (x2 + 1 <= n)x2++;
    	if (y2 + 1 <= n)y2++;
    	for (int i = x1; i <= x2; i++)
    	{
    		for (int j = y1; j <= y2; j++)
    		{
    			martix[i][j] = 1;
    		}
    	}
    	dfs(1);
    	cout << step << endl;
    	return 0;
    }
    
    Yesterday is history,tomorrow ismystery,but today is a gift!That why it is called Present!
  • 相关阅读:
    Eclipse导入Spring Boot项目后pom.xml出现红叉的解决办法
    ubuntu18.04中将刚下载解压的eclipse添加到启动器
    easyui datagrid设置一开始不加载数据
    Spring Boot开发八字箴言(以我过去这段时间的经验总结得到)
    Spring Boot中mybatis insert 如何获得自增id
    jquery控制一个元素是否显示
    easyui-datagrid配置宽度高度自适应
    html页面js响应回车
    Node.js ORM框架Sequelize使用示例
    Java遍历日期代码
  • 原文地址:https://www.cnblogs.com/VictorierJwr/p/12878349.html
Copyright © 2020-2023  润新知