当前位置: 首页 > 知识库问答 >
问题:

这是使用回溯的nqueen问题,但是我使用了dyanamic 2D数组,我的程序编译得很好,但是没有返回任何输出

岑炯
2023-03-14

这是我的代码,当我干运行它,它工作很好,但不在编译器为什么??

提前感谢!!! 请帮忙,我试了3个小时,我的解决方案几乎是一样的,但当我在网上找到它的时候,它是用固定值在这里完成的:https://www.techiedelight.com/print-compossible-solutions-n-queens-problem/

'''

// =========================================
#include<iostream>
#include<cstring>

using namespace std;

bool valid (char **arr , int r, int c , int n)
{   
    bool present = true;

    for (size_t i = 0; i < n; i++)
    {
        if(arr [i][c] == 'Q')
        {
            present = false ;
    
        }
    }
    
   // For right diagonal
   for (size_t i = r , j = c; j>=0 && i>= 0; i++ , j--)
   {
       if(arr[i][j]== 'Q')
       {
           present = false;
           
       }
   }
   
//    for left diagonal

    for (size_t i = r , j = c ; i >= 0 && j< n; i-- , j++)
    {
        if(arr[i][i] == 'Q')
        {
            present = false ;
            
        }
    }
    
    return present;
    
}

void nqueen(char **arr, int n , int count, int row)
{
    //Base Case
    if(row == n)
    {
        for (size_t i = 0; i < n; i++)
        {
            for (size_t j = 0; j < n; j++)
            {
                cout<<arr[i][j]<<" ";
            }
            
            cout<<endl;
        }

        return;
        
    }


    //Recursive Case

    //Main key here is that you need to travel every single 
    //column in each row and then you have to go for column

    for (size_t i = 0; i < n; i++)
    {

        if(valid(arr, row, i , n))
       {
            arr[row][i] = 'Q';
            nqueen(arr, n , count++ ,row ++);
            arr[row][i] = '-';
       }
        
       
    }
    
}


int  main()
{

 #ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin) ;
    freopen("output.txt", "w", stdout) ;
    #endif
    ios_base::sync_with_stdio(false);
    cin.tie(NULL) ; cout.tie(NULL) ;


    int n;
    cin>>n;
   // cout<<n; 
 
 
     char **arr = new char * [n];
     for (size_t i = 0; i < n; i++)
     {
         arr[i] = new char [n];
     }


    for (size_t i = 0; i < n; i++)
    {
        for (size_t j = 0; j < n; j++)
        {
            arr[i][j] = '-';
        }
        
    }
    

    // cout<<"Hello world.";
    //memset(arr , '-' , sizeof arr);

    nqueen (arr, n , 0 , 0);
    
    return 0;


}

'''

共有1个答案

陆卓
2023-03-14

我相信您不是要为添加的每一个皇后增加行数

arr[row][i] = 'Q';
nqueen(arr, n , count++ ,row ++);
arr[row][i] = '-';

应该是

arr[row][i] = 'Q';
nqueen(arr, n , count++ ,row + 1);
arr[row][i] = '-';
 类似资料:
  • 我的任务是创建一个名为MyRectangle的类来表示矩形。 所需的数据字段是宽度、高度和颜色。宽度和高度使用双数据类型,颜色使用字符串。然后编写一个程序来测试MyRectangle类。在客户端程序中,创建两个MyRectangle对象。为两个对象中的每一个指定宽度和高度。将第一个对象指定为红色,将第二个对象指定为黄色。显示两个对象的所有属性,包括其面积。 我已经写了所有的东西,没有错误,但是无论

  • 我正在尝试解决数组旋转的程序。我在代码中遇到分段错误。有人能告诉我这个代码中的问题在哪里吗? 这就是问题所在 给定一个大小为N的未排序数组arr[],将其旋转D元素(顺时针)。 输入的第一行包含T表示测试用例的数量。每个测试用例的第一行包含两个空格分隔的元素,N表示数组的大小,整数D表示旋转的数字大小。随后的行将是N个空格分隔的数组元素。 我已经用下面的代码解决了它。

  • 我是一个大口新手,实际上一切都很好,但不是萨斯编译器,像…根本不起作用。 下面是我的github repo(没有node_modules),但我希望所有内容都在gulpfile.js和package.json中;https://github.com/danielklys7/Portfolio 我尝试了几乎所有的东西,主要是在scss但是我把它改成了我最近工作的sass。 我希望我的gulp配置能正

  • 我正在尝试运行一个简单的ScalatraServlet。 当我编译时,我可以看到它无法导入我的任何Scalatra组件。奇怪的是,尽管我使用的是Scala 2.11,它还是试图编译到一个名为scala-2.10/class的目录。 我的项目出了什么问题? 这是我的SBT配置:

  • 我想用一个2D数组找到方差和标准差,我做了程序,但输出是不正确的。请帮助我,我应该做什么/修改它,以获得请求输出。 输入 3 4 1 0 1 1 1 1 1 1 1 1 1 解决方案输出 0.07513148009038192 0.27410122234383033 预期产出 0.0764 0.2764 我的程序:

  • 很久以前,我在一个论坛上偶然发现了一个有趣的问题,我想知道答案。 请考虑以下 C 函数: 这应该总是返回< code>false,因为< code>var3 == 3000。< code>main函数如下所示: 由于 应始终返回 ,因此期望程序仅将一个 false 打印到屏幕上。但是在编译并运行它之后,还会显示执行: 这是为什么?这段代码有某种未定义的行为吗? 注意:我用

  • 问题内容: 我刚刚在Windows Vista上安装了JDK。之后,我为4个环境变量设置了适当的值:classpath,include,lib,path。之后,我可以编译我的HelloWorld程序(我得到了* .class文件)。但是,当我尝试执行已编译的程序(我键入java HelloWorldApp)时,它不起作用。Java写了很多东西,最后写成“找不到主类:HelloWorldApp”。请

  • leetcode上的问题是:给定一个整数x,如果x是回文整数,则返回true。 当一个整数向后读取和向前读取相同的内容时,它就是一个回文。例如,121是回文,而123不是。 这是我的代码。 我很确定我的逻辑是正确的,但我在NetBeans上测试时没有发现错误,得到的结果是121是正确的,但10是正确的,因为它不是回文,所以应该是错误的?我很困惑,希望能得到一些帮助,更好地理解逻辑。