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);
    }
    

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

  • 相关阅读:
    p3201&bzoj1483 梦幻布丁
    p1341 无序字母对
    p2590&bzoj1036 树的统计
    p1462 通往奥格瑞玛的道路
    p1522 牛的旅行 Cow Tours
    ARC097D Equals
    p2371&bzoj2118 墨墨的等式
    ARC097C K-th Substring
    欧拉函数入门合集(模板)
    主席树
  • 原文地址:https://www.cnblogs.com/Thereisnospon/p/4768515.html
Copyright © 2011-2022 走看看