关于使用C#来编写利用递归实现八皇后问题

我这个代码是跟着小甲鱼之前发的视频来编写的,他用的是c语言,我想用c#编写一下试试,结果结果一直都不对,和c语言代码对照了好几次也没有发现问题,我用了相同的思路用c++编写答案也是正确的,希望各位大佬帮助一下
代码如下

using System;

namespace 递归实现八皇后问题
{
    class Program
    {
        static int count = 0;
        static bool IsSafe(int row, int j, int[,] chess)
        {  
            bool flag1 = false, flag2 = false, flag3 = false, flag4 = false, flag5 = false,flag6 = false;
            //判断同行上是否有皇后
            for (int i = row;i>=0;i--)
            {
                if(chess[i,j]==1)
                {
                    flag6 = true;
                    break;
                }
            }
            //判断同列上是否有皇后
            for (int i = row; i < 8; i++)
            {
                if (chess[i, j] != 0)
                {
                    flag1 = true;
                    break;
                }
            }
            //因为代码无法直接判断一整条斜线上是否有皇后,所以分为四个部分
            //判断左上角是否有皇后
            for (int i = row, k = j; i >= 0 && k >= 0; i--, k--) 
            {
                if (chess[i, k] != 0)
                {
                    flag2 = true;
                    break;
                }
            }
            //判断右下角是否有皇后
            for (int i = row, k = j; i < 8 && k < 8; i++, k++)
            {
                if (chess[i, k] != 0)
                {
                    flag3 = true;
                    break;
                }
            }
            //判断左下角是否有皇后
            for (int i = row, k = j; i < 8 && k >= 0; i++, k--)
            {
                if (chess[i, k] != 0)
                {
                    flag4 = true;
                    break;
                }
            }
            //判断右上角是否有皇后
            for (int i = row, k = j; i >=0 && k <8; i--, k++)
            {
                if (chess[i, k] != 0)
                {
                    flag5 = true;
                    break;
                }
            }
            //最后判断
            if(flag1||flag2||flag3||flag4||flag5||flag6)
            {
                return false;
            }
            else
            {
                return true;
            }
        }
        //此处的row代表的时起始的行数,不是总行数
        static void EightQueen(int row ,int n,int[,] chess)
        {
            //创建一个新的棋盘
            int[,] chess2 = new int[8,8];
            for(int i = 0;i<8;i++)
            {
                for(int j = 0;j<8;j++)
                {
                    chess2[i,j] = chess[i,j];
                }
            }

            if (row == 8)//递归结束
            {
                Console.WriteLine("第"+(count+1)+"种");
                for (int i = 0; i < 8; i++) 
                {
                    for (int j = 0; j < 8; j++) 
                    {
                        Console.Write(chess2[i,j]+" ");
                    }
                    Console.WriteLine();
                }
                Console.WriteLine();
                count++;
            }
            else//判断以及放入皇后棋子
            {
                for(int j=0;j<n;j++)
                {
                    if (IsSafe(row,j,chess))//这里使用IsSafe方法判断该位置是否可放入皇后棋子
                    {
                        for(int i=0;i<8;i++)
                        {
                            chess[row, i] = 0;
                        }

                        chess[row, j] = 1;

                        EightQueen(row + 1, n, chess);
                    }
                }
            }
        }
        static void Main(string[] args)
        {
            int[,] chess = new int[8,8];
            for(int i = 0;i<8;i++)
            {
                for(int j = 0;j<8;j++)
                {
                    chess[i,j] = 0;
                }
            }
            EightQueen(0, 8, chess);
            Console.WriteLine("总共有" + count + "种摆放方法");
        }
    }
}

https://www.cnblogs.com/LanTianYou/p/4963660.html

#include<bits/stdc++.h>
using namespace std;
bool d[16]={0},b[9]={0},c[16]={0};
short tot,sum,a[9];
int search(int);
int print();
int main()
{
//tot=0;
search(1);
//cout<<tot;
}
int search(int i){
int j;
for(j=1;j<=8;j++)
if((!b[j])&&(!c[i+j])&&(!d[i-j+7]))
{
a[i]=j;
b[j]=1;
c[i+j]=1;
d[i-j+7]=1;
if(i==8)print();
else search(i+1);
b[j]=0;
c[i+j]=0;
d[i-j+7]=0;
}
//return 0;
}
int print()
{
int i;
sum++;//tot=tot+1;
cout<<"sun="<<sum<<endl;
for(i=1;i<=8;i++)
cout<<setw(4)<<a[i];
cout<<endl;
//return 0;
}
望采纳