第一次实验——八皇后问题

本文通过C语言实现了一个解决八皇后问题的程序。该程序利用递归和回溯的方法检查每个皇后的位置是否安全,最终输出所有可能的解决方案。
部署运行你感兴趣的模型镜像
#include <stdio.h>
int count =0;
int notDanger(int row,int j,int (*chess)[8])
{
  int i,k,flag1=0,flag2=0,flag3=0,flag4=0,flag5=0;
  for(i=0;i<8;i++)
  {
  if(*(*(chess+i)+j)!=0)
   {
     flag1 =1;
     break;
   }
  }
  for(i=row,k=j;i>=0&&k>=0;i--,k--)
  {
  if(*(*(chess+i)+k)!=0)
   {
  flag2=1;
  break;
   }
  }
   for(i=row,k=j;i<8&&k<8;i++,k++)
  {
  if(*(*(chess+i)+k)!=0)
   {
  flag3=1;
  break;
   }
  }
   for(i=row,k=j;i>=0&&k<8;i--,k++)
  {
  if(*(*(chess+i)+k)!=0)
   {
  flag4=1;
  break;
   }
  }
   for(i=row,k=j;i<8&&k>=0;i++,k--)
  {
  if(*(*(chess+i)+k)!=0)
   {
  flag5=1;
  break;
   }
  }
  if(flag1||flag2||flag3||flag4||flag5)
  {
   return 0;
  }
   else
   {
   return 1;
   }
   
}
EightQueen(int row,int n,int (*chess)[8])
{
     int chess2[8][8],i,j;
     for(i=0;i<8;i++)
    {
      for(j=0;j<8;j++)
      {
       chess2[i][j] = chess[i][j] ;
      }
    }
    if(8 == row)
    {
       printf("the %d\n",count+1);
      for(i=0;i<8;i++)
      {
        for(j=0;j<8;j++)
        { 
           printf("%d ",*(*(chess2+i)+j));
        }
        printf("\n");
      }
      printf("\n");
      count++;
    }
    else
    {
      for(j=0;j<n;j++)
      {
       if(notDanger(row,j,chess))
           {
             for(i=0;i<8;i++)
             {
               *(*(chess2+row)+i)=0;
             }
             *(*(chess2+row)+j) =1;
             EightQueen(row+1,n,chess2);
           }
      }
    }
     
}
int main()
{
	int chess[8][8],i,j;
    for(i=0;i<8;i++)
    {
      for(j=0;j<8;j++)
      {
       chess[i][j] = 0 ;
      }
    }
    EightQueen(0,8,chess);
    printf("%d\n\n",count);
    scanf("%d",i);
	return 0;
}

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值