`

回溯算法

 
阅读更多

回溯法(探索与回溯法)是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。

用回溯法解题的一般步骤:

  (1)针对所给问题,定义问题的解空间;

  (2)确定易于搜索的解空间结构;

 (3)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。

用回溯法解决八皇后问题的C语言程序
  #include<stdio.h>
  #include<stdlib.h>
  int col[9] = {0}, a[9];
  int b[17], c[17];
  main()
  
{
      int m, good;
      int i, j, k;
      char q;
      for(i = 0; i < 17; i++)
          {
          if(i < 9) a[i] = 1;
          b[i] = 1;
        c[i] = 1;
          
    }
      good = 1;
      col[1] = 1;
      m = 1;
      while(col[0] != 1)
          {
          if(good)
              if(m == 8)
                  {
                  for(i = 1; i < 9; i++)
                      printf("col[%d] %d/n", i, col[i]);
                  printf("input 'q' to quit/n");
                  scanf("%c", &q);
                  getchar();
                  if(q == 'q' || q == 'Q') exit(0);
                  while(col[m] == 8)
                      {
                      m--;
                      a[col[m]] = b[m+col[m]] = c[8+m-col[m]] = 1;
                      
                }
                  a[col[m]] = b[m+col[m]] = c[8+m-col[m]] = 1;
                  col[m]++;
                  
            }
              else
                  {
                  a[col[m]] = b[m+col[m]] = c[8+m-col[m]] = 0;
                  m++;
                  col[m] = 1;
                  
            }
          else
              {
              while(col[m] == 8)
                  {
                  m--;
                  a[col[m]] = b[m+col[m]] = c[8+m-col[m]] = 1;
                  
            }
              col[m]++;
              
        }
          good = a[col[m]] && b[m+col[m]] && c[8+m-col[m]];
          
    }
      
}


分享到:
评论

相关推荐

    装载问题回溯算法

    回溯算法是一种用于求解此类组合优化问题的有效方法。 回溯算法是一种试探性的解决问题的方法,它通过递归地尝试所有可能的解决方案来寻找最优解。当一个分支无法导致有效解时,算法会撤销最近的选择并尝试其他路径...

    算法分析论文——回溯算法的应用.zip

    回溯算法是一种强大的问题求解方法,尤其在解决复杂组合优化问题时表现出高效性。它是一种试探性的解决问题的方法,通过逐步构建可能的解决方案,并在过程中不断检查这些解决方案的有效性。如果发现当前路径无法导出...

    用回溯算法解决0/1背包问题

    ### 使用回溯算法解决0/1背包问题 在计算机科学领域,背包问题是一类经典的组合优化问题,其中0/1背包问题是指给定一组物品,每个物品都有一个重量和一个价值,目标是在不超过背包总承重的情况下,尽可能使得所选...

    野人传教士问题回溯算法

    在野人传教士问题中,我们可以用回溯算法来尝试不同的过河组合,如果某个组合导致了不安全的情况(即野人数量超过传教士),则撤销这一步操作,返回到上一步,尝试其他可能性。 在VC++环境下实现野人传教士问题,...

    遗传算法回溯算法解0--1背包问题

    ### 遗传算法与回溯算法在0-1背包问题中的应用 #### 一、0-1背包问题概述 0-1背包问题是一个经典的组合优化问题,在计算机科学和运筹学领域有广泛的应用。该问题的核心是:给定一组物品,每种物品都有自己的重量和...

    回溯算法求数独的解

    回溯算法则是解决数独问题的一种高效策略,它通过尝试填入数字并检查是否符合规则来逐步求解。 首先,我们需要理解回溯算法的基本思想。回溯法是一种试探性的解决问题的方法,它尝试分步地找出所有可能的解决方案,...

    回溯算法全代码

    回溯算法是一种强大的问题求解方法,主要用于解决各种组合优化问题和搜索问题。它通过尝试所有可能的解决方案,并在过程中适时地剪枝(剔除不可能的路径)来避免无效的计算,以找到满足条件的最优或可行解。下面将...

    acm竞赛回溯算法总结

    回溯算法是一种试探性的解决问题的方法,它在搜索解空间树的过程中,通过不断地尝试来寻找问题的解。在ACM(国际大学生程序设计竞赛)中,回溯算法常常被用来解决那些具有大量可能解且需要尝试多种路径的问题。下面...

    用回溯算法解决旅行商问题

    回溯算法是一种在搜索解决问题时,通过尝试所有可能的解并逐步缩小搜索空间来找到最优解的方法。在旅行商问题(Traveling Salesman Problem, TSP)中,它被广泛应用于寻找一条经过所有城市且仅访问一次的最短路径。...

    kmp无回溯算法

    北大老师写的kmp无回溯算法,数据结构与算法,大家懂得

    五大常用算法——回溯算法详解及经典例题,算法数据结构 五大常用算法

    回溯算法是一种常用的搜索算法,它可以用于解决许多复杂的问题。回溯算法的基本思想是,通过不断地尝试和回溯来找到问题的解。它可以看作蛮力法穷举搜索的改进,能够避免搜索所有可能的解,从而提高搜索效率。 在...

    回溯算法 作业分配问题

    回溯算法是一种在搜索解决问题时,通过尝试所有可能的解决方案并逐步缩小问题规模来找到正确解的方法。在“作业分配问题”中,我们通常需要解决的是如何将n个作业合理地分配给n个人,使得每个人都有一个作业,且每个...

    回溯算法设计及其实际应用研究

    回溯算法是一种强大的问题求解方法,广泛应用于解决复杂的问题,如组合优化、搜索和图论等。在计算机科学中,回溯算法通常用于在尝试解决问题时,通过系统地探索可能的解决方案空间来找到有效解。它的工作原理是通过...

    关于回溯算法的几个示例

    回溯算法是一种试探性的解决问题的方法,它尝试逐步构建解决方案,并在发现某一步无法达到目标时,退回一步,尝试其他可能的路径。这种“走不通就回头”的策略使得回溯算法适用于解决很多组合优化问题,如找零钱问题...

    用栈、回溯算法设计迷宫程序

    标题中的“用栈、回溯算法设计迷宫程序”指的是使用数据结构中的栈以及算法中的回溯法来解决迷宫问题。在这个问题中,我们通常将迷宫视为一个二维矩阵,其中1代表墙壁,0代表可通行的道路。目标是找到从起点到终点的...

    回溯算法例题,C++实现

    回溯算法是一种在解决问题时,通过尝试所有可能的解决方案,并在每一步中排除那些不可能产生正确结果的选项来寻找问题答案的方法。它主要用于解决约束满足问题,如迷宫求解、八皇后问题、数独填充等。在本例题中,...

    回溯算法的思想和举例

    ### 回溯算法的核心概念与应用 #### 一、回溯算法的基本思想 回溯算法是一种用于解决问题的有效方法,尤其适用于解决那些具有多种可能解的问题。它的基本思想是从一条路径开始尝试前进,如果可行就继续深入;如果...

    n后问题回溯算法 java

    回溯算法是一种试探性的解决问题的方法,它尝试逐步构建解决方案,当发现当前选择无法导致有效解时,会撤销最近的选择并尝试其他可能的路径。在n皇后问题中,回溯算法通常通过递归的方式实现,每次尝试在一个未放置...

    回溯算法java实例

    回溯算法是一种在解决问题时,通过尝试所有可能的解决方案,并在发现不符合条件的解时,及时退回并尝试其他可能性的搜索算法。它常用于解决一些组合优化问题,如八皇后问题、迷宫寻路等。Java作为一种通用的编程语言...

    matlab中_回溯算法 模拟退火算法-matlab

    根据给定的MATLAB代码和描述,我们可以深入探讨回溯算法和模拟退火算法在解决旅行商问题(TSP)中的应用。 ### 回溯算法 回溯算法是一种通过尝试解决子问题并撤销不成功的解决方案来寻找问题解答的算法。在TSP中,...

Global site tag (gtag.js) - Google Analytics