这是我的代码,当我干运行它,它工作很好,但不在编译器为什么??
提前感谢!!! 请帮忙,我试了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;
}
'''
我相信您不是要为添加的每一个皇后增加行数
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] = '-';