签到

06月21日
尚未签到

共有回帖数 0

    李小主任

    等级:
    今天上午考计算方法,有个题要求编程求解八皇后问题,我把大一时写的程序写上去了,HOHO~!~!

    在一个8×8的棋盘上放置8个皇后,使得他们彼此不受攻击。按照国际象棋的规则,一个皇后可以攻击处在同一行或者同一列或者同一斜线上的其它任何棋子。

    #include stdio.h
    #include stdlib.h
    #include math.h

    int Judge(int *p, int j)
                //判断当前棋子位置是否符合规则,是则返回1,否则返回0;
    {
      int i;
      for(i=0;ij;i++)
      {
        if(p[j]==p) return 0;
        if(abs(p[j]-p)==j-i) return 0;
      }
      return 1;
    }


    int main()
    {
       int a[8]; //a表示第i行的后所在位置(a[3]=0表示第3行的后在第0列)
       int i=0,j=0,k=0;

       for(a[0]=0;a[0]8;j=0,a[j]++)
         for(a[++j]=0;a[j]8;j=1,a[j]++)
          if(Judge(a,j))
           for(a[++j]=0;a[j]8;j=2,a[j]++)
            if(Judge(a,j))
             for(a[++j]=0;a[j]8;j=3,a[j]++)
              if(Judge(a,j))
               for(a[++j]=0;a[j]8;j=4,a[j]++)
                if(Judge(a,j))
                 for(a[++j]=0;a[j]8;j=5,a[j]++)
                  if(Judge(a,j))
                   for(a[++j]=0;a[j]8;j=6,a[j]++)
                    if(Judge(a,j))
                     for(a[++j]=0;a[j]8;a[j]++)
                      if(Judge(a,j))
                      { for(i=0;i8;i++) printf("%d",a);
                       printf("%3s"," ");
                       if(!(++k%7)) printf("n");
                      }
       printf("nn%dnn",k);
       printf("n请按任意键结束...");
       getch();
       return 0;
    }

    楼主 2016-02-25 11:44 回复

共有回帖数 0
  • 回 帖
  • 表情 图片 视频
  • 发表

登录直线网账号

Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号 意见反馈 | 关于直线 | 版权声明 | 会员须知