zoukankan      html  css  js  c++  java
  • 洛谷P1219八皇后-题解

    原题:

    思路:

    显然是搜索

    但问题在于要同时标记行、列、对角线

    对角线有规律:从左上到右下,x-y是固定值,从左下到右上,x+y是固定值

    由于x-y有可能是负的,所以要+n

    代码:

    #include <iostream>
    using namespace std;
    int n,ans,book[233],djx_z[233],djx_f[233],arr[233];
    void DFS(int dep)
    {
    	if(dep>n)
    	{
    		ans++;
    		if(ans<=3)
    		{
    			for(int i=1;i<=n;i++)
    				cout << arr[i] << ' ';
    			cout << endl;
    		}
    		return;
    	}
    	for(int i=1;i<=n;i++)
    	{
    		if(book[i]==0&&djx_z[dep+i]==0&&djx_f[dep-i+n]==0)
    		{
    			arr[dep]=i;
    			book[i]=1;
    			djx_z[dep+i]=1;
    			djx_f[dep-i+n]=1;
    			DFS(dep+1);
    			book[i]=0;
    			djx_z[dep+i]=0;
    			djx_f[dep-i+n]=0;
    		}
    	}
    }
    int main()
    {
    	cin >> n;
    	DFS(1);
    	cout << ans;
    	return 0;
    }
    

      

  • 相关阅读:
    RabbitMQ-RPC版主机管理程序
    FTP
    主机管理程序
    高级FTP
    选课系统
    电子银行购物商城
    计算器
    员工信息查询系统
    工资管理系统
    三级菜单
  • 原文地址:https://www.cnblogs.com/lujin49/p/13451077.html
Copyright © 2011-2022 走看看