二分之根号五减一442 2023-10-21 22:32 采纳率: 90%
浏览 1
已结题

C语言,四皇后问题的核心代码中两个循环的顺序

img

void queen(int j,int (*q)[4])
{
    int i,k;
    for(i=0;i<4;i++)
    {
    if(panduan(i,j,q))
    {
        q[i][j]=1;
        queen(j+1,q);
    }
    }
    if(j==4)
    {
    for(i=0;i<4;i++)
    {
        for(k=0;k<4;k++)
        printf("%d ",q[i][k]);
        printf("\n");
    }
    printf("\n");
    return;
   }
 } 

这个四皇后问题的核心代码的函数中为什么不能把这两个循环倒过来啊?

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-22 08:45
    关注

    【以下回答由 GPT 生成】

    在这个代码中,第一个循环是一个递归调用,它用于逐个尝试不同的皇后位置。第二个循环用于打印和存储每个正确的解。

    如果将这两个循环的顺序互换,即将第二个循环放在第一个循环之前,会导致以下问题:

    1. 首先,如果将第二个循环放在第一个循环之前,将会在尝试皇后位置之前就进行打印和存储。这意味着在尝试所有可能位置之前,已经开始打印和存储了。因此,我们将无法得到正确的结果,因为我们还没有找到任何一个解。

    2. 其次,将第一个循环放在第二个循环之后,递归调用的顺序也会受到影响。在这种情况下,我们将无法正确地进入下一列的递归调用。因为在第一个循环中,当满足条件时,会立即进行下一个递归调用。但是在第二个循环之后,递归调用已经完成,因此递归将无法继续。

    综上所述,将这两个循环的顺序互换将导致无法得到正确的解。因此,不能把这两个循环的顺序倒过来。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月30日
  • 已采纳回答 10月22日
  • 请详细说明问题背景 10月21日
  • 创建了问题 10月21日

悬赏问题

  • ¥15 matlab数据降噪处理,提高数据的可信度,确保峰值信号的不损失?
  • ¥15 怎么看我在bios每次修改的日志
  • ¥15 python+mysql图书管理系统
  • ¥15 Questasim Error: (vcom-13)
  • ¥15 船舶旋回实验matlab
  • ¥30 SQL 数组,游标,递归覆盖原值
  • ¥15 为什么我的数据接收的那么慢呀有没有完整的 hal 库并 代码呀有的话能不能发我一份并且我用 printf 函数显示处理之后的数据,用 debug 就不能运行了呢
  • ¥20 gitlab 中文路径,无法下载
  • ¥15 用动态规划算法均分纸牌
  • ¥30 udp socket,bind 0.0.0.0 ,如何自动选取用户访问的服务器IP来回复数据