zoukankan      html  css  js  c++  java
  • 八皇后问题

    #include<stdio.h>
    int map[8][8]={0},z=0;
    void output()//打印一个棋盘
    {
        int i,j;
        for(i=0;i<8;i++)
        {
            for(j=0;j<8;j++)
                printf("[%d]",map[i][j]);
            printf("
    ");
        }
        printf("
    ");
    }
    ////判断能否在此点放置一个皇后(不是很友好。。)
    int canput(int x,int y)
    {
       int i,j,flag=0;
       for(i=x+1,j=y+1;i<8&&j<8;i++,j++)if(map[i][j])return 0;
       for(i=x-1,j=y-1;i>=0&&j>=0;i--,j--)if(map[i][j])return 0;
       for(i=x+1,j=y-1;i<8&&j>=0;i++,j--)if(map[i][j])return 0;
       for(i=x-1,j=y+1;i>=0&&j<8;i--,j++)if(map[i][j])return 0;
       for(i=0;i<8;i++)
       {
          if(i==x)continue;
          if(map[i][y])return 0;
       }
       for(j=0;j<8;j++)
       {
           if(j==y)continue;
          if(map[x][j])return 0;
       }
       return 1;
    }
    void ans(int row,int k)
    {
        int col;
    
        if(k>=8)
        {
            output();
            z++;
        }
        else if(row<8)
        {
            for(col=0;col<8;col++)//从该行找到可以放置皇后的位置
            {
                if(canput(row,col))
                {
                    map[row][col]=1;//如果能在此放置,则标记为放置
                    ans(row+1,k+1);//求解下一行
                    map[row][col]=0;//在该位置不放置皇后
                }
            }
        }
    }
    int main()
    {
        ans(0,0);
        printf("共有%d解
    ",z);
    }
    

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    常用
    饼图
    箱体图
    提取csv文件中需要的部分
    从文件夹中找需要的信息 并生成csv文件
    在磁盘中找到关键字文件 并删除
    正方形棋盘格
    秒表
    【题解】【BZOJ】AGC008F Blackout
    【题解】【BZOJ】BZOJ2281 黑白棋
  • 原文地址:https://www.cnblogs.com/Thereisnospon/p/4768515.html
Copyright © 2011-2022 走看看