C#,动态规划(DP)N皇后问题(N Queen Problem)的回溯(Backtracking)算法与源代码

news2025/2/25 15:55:43

1 N皇后问题(N Queen Problem)

在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。

2 回溯算法

回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。

回溯法也称试探法,它的基本思想是:从问题的某一种状态(初始状态)出发,搜索从这种状态出发所能达到的所有“状态”,当一条路走到“尽头”的时候(不能再前进),再后退一步或若干步,从另一种可能“状态”出发,继续搜索,直到所有的“路径”(状态)都试探过。这种不断“前进”、不断“回溯”寻找解的方法,就称作“回溯法”。

3 源程序

using System;
using System.Text;
using System.Collections;
using System.Collections.Generic;

namespace Legalsoft.Truffer.Algorithm
{
    /// <summary>
    /// N皇后问题
    /// </summary>
    public static partial class Algorithm_Gallery
    {
        private static bool NQP_IsSafe(int[,] board, int row, int col)
        {
            int N = board.GetLength(0);
            for (int i = 0; i < col; i++)
            {
                if (board[row, i] == 1)
                {
                    return false;
                }
            }
            for (int i = row, j = col; i >= 0 && j >= 0; i--, j--)
            {
                if (board[i, j] == 1)
                {
                    return false;
                }
            }
            for (int i = row, j = col; j >= 0 && i < N; i++, j--)
            {
                if (board[i, j] == 1)
                {
                    return false;
                }
            }
            return true;
        }

        private static bool NQP_Utility(ref int[,] board, int col)
        {
            int N = board.GetLength(0);
            if (col >= N)
            {
                return true;
            }
            for (int i = 0; i < N; i++)
            {
                if (NQP_IsSafe(board, i, col))
                {
                    board[i, col] = 1;

                    if (NQP_Utility(ref board, col + 1) == true)
                    {
                        return true;
                    }
                    board[i, col] = 0;
                }
            }
            return false;
        }

        public static bool NQP_Solve(int n,out int[,] board)
        {
            board = new int[n, n];            

            if (NQP_Utility(ref board, 0) == false)
            {
                return false;
            }

            return true;
        }

        public static string ToHtml(int[,] board)
        {
            int N = board.GetLength(0);
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("<style>");
            sb.AppendLine("td { padding:5px;text-align:center; }");
            sb.AppendLine("</style>");
            sb.AppendLine("<table border=1 bordercolor='#999999' style='border-collapse:collapse;'>");
            for (int i = 0; i < N; i++)
            {
                sb.AppendLine("<tr>");
                for (int j = 0; j < N; j++)
                {
                    sb.AppendLine("<td>" + board[i, j] + "</td>");
                }
                sb.AppendLine("</tr>");
            }
            sb.AppendLine("</table>");
            return sb.ToString();
        }
    }
}
 

————————————————————————————————

POWER BY 315SOFT.COM

4 源代码

using System;
using System.Text;
using System.Collections;
using System.Collections.Generic;

namespace Legalsoft.Truffer.Algorithm
{
    /// <summary>
    /// N皇后问题
    /// </summary>
    public static partial class Algorithm_Gallery
    {
        private static bool NQP_IsSafe(int[,] board, int row, int col)
        {
            int N = board.GetLength(0);
            for (int i = 0; i < col; i++)
            {
                if (board[row, i] == 1)
                {
                    return false;
                }
            }
            for (int i = row, j = col; i >= 0 && j >= 0; i--, j--)
            {
                if (board[i, j] == 1)
                {
                    return false;
                }
            }
            for (int i = row, j = col; j >= 0 && i < N; i++, j--)
            {
                if (board[i, j] == 1)
                {
                    return false;
                }
            }
            return true;
        }

        private static bool NQP_Utility(ref int[,] board, int col)
        {
            int N = board.GetLength(0);
            if (col >= N)
            {
                return true;
            }
            for (int i = 0; i < N; i++)
            {
                if (NQP_IsSafe(board, i, col))
                {
                    board[i, col] = 1;

                    if (NQP_Utility(ref board, col + 1) == true)
                    {
                        return true;
                    }
                    board[i, col] = 0;
                }
            }
            return false;
        }

        public static bool NQP_Solve(int n,out int[,] board)
        {
            board = new int[n, n];            

            if (NQP_Utility(ref board, 0) == false)
            {
                return false;
            }

            return true;
        }

        public static string ToHtml(int[,] board)
        {
            int N = board.GetLength(0);
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("<style>");
            sb.AppendLine("td { padding:5px;text-align:center; }");
            sb.AppendLine("</style>");
            sb.AppendLine("<table border=1 bordercolor='#999999' style='border-collapse:collapse;'>");
            for (int i = 0; i < N; i++)
            {
                sb.AppendLine("<tr>");
                for (int j = 0; j < N; j++)
                {
                    sb.AppendLine("<td>" + board[i, j] + "</td>");
                }
                sb.AppendLine("</tr>");
            }
            sb.AppendLine("</table>");
            return sb.ToString();
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1473819.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

水果FL Studio21.2.3.4004里的一个动态视觉插件Fruity Dance的教程

这是一篇关于水果&#xff08;FL Studio&#xff09;里的一个动态视觉插件Fruity Dance的教程。前部分较多地引用了FL的帮助文档&#xff0c;后部分结合了我操作的一些经验。 &#xff08;文中这种颜色的字可略过不看&#xff0c;属于一些基础操作的解释补充&#xff09; 准备材…

Qt6.8 GRPC功能使用(1)标准GRPC C++ exmple编译环境搭建

MSYS2 环境搭建 1. MSYS2 安装 https://www.msys2.org/#installation 网页中找到Installation&#xff0c; 提供下载&#xff0c; 本次下载版本是 [msys2-x86_64-20240113.exe](https://github.com/msys2/msys2-installer/releases/download/2024-01-13/msys2-x86_64-202401…

NXP实战笔记(十一):32K3xx基于RTD-SDK在S32DS上配置DFLASH、MemAcc、Fee

目录 1、概述 2、RTD-SDK配置之Cache_Ip 3、RTD-SDK配置之Mem_43_InFls 4、RTD-SDK配置之MemAcc 5、RTD-SDK配置之Fee 6、代码示例 1、概述 S32K3目前安装的RTD普遍使用的是R22-11版本的AUTOSAR规范&#xff0c;作为一直使用AUTOSAR4.2.2的程序员来讲&#xff0c;属实迭代…

备考2025年考研数学(三):2015-2024年考研数学真题练一练

今天&#xff0c;我们继续分享2015年-2024年的考研数学三填空题&#xff0c;随机做5道真题&#xff0c;并提供解析。看看正在备考2025年考研的你能做对几道。 考研数学和政治、英语一项&#xff0c;都是拉分大户&#xff0c;但是数学如果掌握了技巧&#xff0c;吃透了知识点的话…

跨境电商营销进化史:从传统广告到智能化策略的全面探析

随着全球化的不断推进和互联网技术的飞速发展&#xff0c;跨境电商在过去几年里取得了显著的发展。在这个竞争激烈的市场中&#xff0c;企业们纷纷调整营销策略以应对不断变化的消费者需求和市场趋势。本文Nox聚星将和大家探讨跨境电商营销策略的演变过程&#xff0c;从传统的推…

H6601 惠海 降压恒压芯片 支持12V24V36V48V60V72V80V 外围简单 动态负载良好 纹波小

降压恒压芯片的工作原理及其特性&#xff1a; 开关模式&#xff1a;降压恒压芯片通常使用开关模式电源供应&#xff08;SMPS&#xff09;技术&#xff0c;通过高速开关晶体管&#xff08;通常是MOSFET&#xff09;来控制电流的流动&#xff0c;从而将输入电压降低到所需的输出…

提速互联 智向未来 | 广和通AIoT模组及解决方案惊艳MWC 2024

2月26日&#xff0c;以“未来先行”为主题的世界移动通信大会2024&#xff08;以下简称&#xff1a;MWC 2024&#xff09;在巴塞罗那正式拉开帷幕。全球移动运营商、垂直行业客户、生态伙伴齐聚一堂&#xff0c;共同探讨5G-A、人工智能、NTN、可持续循环等全球科技趋势与创新技…

GaussDB SQL调优:选择合适的分布列

一、背景 GaussDB是华为公司倾力打造的自研企业级分布式关系型数据库&#xff0c;该产品具备企业级复杂事务混合负载能力&#xff0c;同时支持优异的分布式事务&#xff0c;同城跨AZ部署&#xff0c;数据0丢失&#xff0c;支持1000扩展能力&#xff0c;PB级海量存储等企业级数…

OSI参考模型和TCP/IP网络参考模型

1、OSI参考模型 1.1 产生背景 为了解决网络之间的兼容性问题,实现网络设备间的相互通讯,国际标准化组织ISO于1984年提出了OSIRM(Open System Interconnection Reference Model,开放系统互连参考模型)。OSI参考模型很快成为计算机网络通信的基础模型。由于种种原因,并没有…

React回顾

一、基础 1、使用babel解析 2、不直接使用jsx&#xff0c;jsx写起来很繁琐 3、jsx语法规则 4、函数式组件的使用 5、函数式组件渲染 6、类组件渲染 7、类组件中事件调用this指向问题 8、类组件不能直接改变状态 9、props接收数据类型限制 类型限制放到类组件内部&#xff0c;用…

OSCP靶场--Algernon

OSCP靶场–Algernon 考点: 1.nmap扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.243.65 -sV -sC -p- --min-rate 5000 Starting Nmap 7.92 ( https://nmap.org ) at 2024-02-26 21:17 EST Nmap scan report for 192.168.243.65 Host is up (0.30s latency). No…

PyTorch概述(八)---ADAM

import torch torch.optim.Adam(params,lr0.001,betas(0.9,0.999),eps1e-8,weight_decay0,amsgradFalse,*,foreachNone,maximizeFalse,capturableFalse,differentiableFalse,fusedNone) 类torch.optim.Adam实现Adam算法 Adam算法描述 输入:初始化:for t1 to ...do if maximi…

基于AI将普通RGB图像转换为苹果Vision Pro支持的空间照片

将 RGB 图像转换为空间图片 一、引言 随着AR和VR技术的普及,空间照片格式(.HEIC)逐渐受到关注。这种格式允许用户在AR/VR设备上体验到更为真实的立体空间效果。为了让更多的普通图片也能享受这种技术,我们开发了这款可以将普通RGB图像转换为苹果Vision Pro支持的.HEIC格式的…

前后端分离nodejs+vue高校教材征订系统47nia

本教材管理网站是为了提高用户查阅信息的效率和管理人员管理信息的工作效率&#xff0c;可以快速存储大量数据&#xff0c;还有信息检索功能&#xff0c;这大大的满足了学生、教师和管理员这三者的需求。操作简单易懂&#xff0c;合理分析各个模块的功能&#xff0c;尽可能优化…

petalinux-config : command not found 和petalinux-build: command not found

发现这两个问题都是因为&#xff1a;没有先设置 petalinux 的作环境 先输入命令 先执行 source /opt/pkg/petalinux/2020.2/settings.sh 或者 sptl 然后切换目录&#xff0c;到相应的目录&#xff0c;就可以了

QSpace Pro 一款简洁高效的多窗格文件管理器,灵活且实用!

在日常的工作和生活中&#xff0c;文件管理是不可或缺的一环。尤其是对于我们这些依赖于数字工具的现代人来说&#xff0c;一个高效、便捷且功能强大的文件管理器能大大提升我们的效率。最近&#xff0c;我有幸试用了一款名为QSpace的多窗格文件管理器&#xff0c;它给我留下了…

嵌入式驱动学习第一周——git的使用

前言 本文主要介绍git的使用&#xff0c;包括介绍git&#xff0c;gitee&#xff0c;以及使用gitee创建仓库并托管代码 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程&#xff0c;未来预计四个月将高强度更新本专栏&#xff0c;喜欢的可以关注本博主并订阅本专栏&#xf…

Unity将4个纹理图拼接成1个纹理

需要的效果 最终实现的效果大概如下: 4个贴图上去 这里随便放一个切分的图。 Shader代码如下 直接上代码: // Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)// Unlit shader. Simplest possible textured shad…

打包Docker镜像时候,ARG标签如何使用?

FROM registry.cn-qingdao.aliyuncs.com/dataease/fabric8-java-alpine-openjdk8-jre:edge-chromium-11这里这个标签如何使用 ARG IMAGE_TAGRUN mkdir -p /opt/apps /opt/dataease/data/feature/full /opt/dataease/drivers /opt/dataease/plugins/defaultADD core/mapFiles/fu…

Python分支和循环结构及其应用(文末送书)

一、分支结构 应用场景 我们写的Python代码都是一条一条语句顺序执行&#xff0c;这种代码结构通常称之为顺序结构。然而仅有顺序结构并不能解决所有的问题。 if语句的使用 在Python中&#xff0c;要构造分支结构可以使用if、elif和else关键字。所谓关键字就是有特殊含义的…