Chinaunix首页 | 论坛 | 博客
  • 博客访问: 984605
  • 博文数量: 150
  • 博客积分: 3017
  • 博客等级: 少校
  • 技术积分: 3829
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-19 14:40
个人简介

Now in Baidu WISE team

文章分类

全部博文(150)

文章存档

2014年(8)

2013年(31)

2012年(111)

分类: C/C++

2013-03-07 11:43:58

八皇后的非递归算法的实现。
练手代码. codepad.org已验证。
和标准答案还是有差距。


点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. void output(int* nums, int size){
  4.     int i = 0;
  5.     for(;i<size;i++){
  6.         printf("%d->", nums[i]);
  7.     }
  8.     printf("n");
  9. }
  10. char isValid(int* nums, int cur, int len){
  11.     int i = 0;
  12.     for(;i<len;i++){
  13.         if( cur == nums[i])
  14.             return 0;
  15.         if( (len-i) == (cur-nums[i]))
  16.             return 0;
  17.         if( (len - i) == -(cur-nums[i]))
  18.             return 0;
  19.     }
  20.     return 1;
  21. }

  22. int main(){

  23.     int i = 0;
  24.     int len = 0;

  25.     int stack[8] = {0};
  26.     do{    
  27.         char isSuc = 0;
  28.         for(;i<8;i++){
  29.             if(isValid(stack,i,len)){
  30.                 isSuc = 1;
  31.                 stack[len++] = i;
  32.                 break;
  33.             }
  34.         }
  35.         if(isSuc){
  36.             if(len == 8){
  37.                 output(stack, 8);
  38.                             len--;
  39.                             i = stack[7]+1;
  40.             }
  41.                     else{
  42.                             i = 0;
  43.                        }
  44.         }
  45.         else{
  46.             len--;
  47.             i= stack[len]+1;
  48.         }
  49.     
  50.     }while(len!=0 || i != 8);
  51. }



阅读(2096) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~