Chinaunix首页 | 论坛 | 博客
  • 博客访问: 8016
  • 博文数量: 5
  • 博客积分: 353
  • 博客等级: 一等列兵
  • 技术积分: 60
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-10 14:00
文章分类
文章存档

2010年(5)

我的朋友
最近访客

分类: C/C++

2010-10-03 12:23:18



#include<stdio.h>
#include<algorithm>

using namespace std;

static const int kTotalRow = 6;
static const int kTotalSum = (kTotalRow + 1) * (kTotalRow) / 2;

static bool col_exist[kTotalRow][kTotalRow] = { false };
static bool dia_exist[2][kTotalRow] = { false };
static const int* matrix[kTotalRow];

void search(int row) {
  int numbers[kTotalRow] = {1, 2, 3, 4, 5, 6};

  if (row >= kTotalRow) {
    for (int i = 0; i < kTotalRow; i++) {
      for (int j = 0; j < kTotalRow; j++)
        printf("%d ", matrix[i][j]);
      printf("\n");
    }
    printf("\n");
    return;
  }

  matrix[row] = numbers;
  do {
    bool could_prun = false;
    for (int i = 0; i < kTotalRow; i++) {
      int val = numbers[i];
      if (col_exist[i][val]) {
        could_prun = true;
        break;
      }
    }

    int diag_val1 = numbers[row];
    int diag_val2 = numbers[kTotalRow - row - 1];
    if (dia_exist[0][diag_val1]) {
      could_prun = true;
    }

    if (dia_exist[1][diag_val2]) {
      could_prun = true;
    }

    if (could_prun) {
      continue;
    }

    for (int i = 0; i < kTotalRow; i++)
      col_exist[i][numbers[i]] = true;
    dia_exist[0][diag_val1] = true;
    dia_exist[1][diag_val2] = true;
    search(row + 1);
    for (int i = 0; i < kTotalRow; i++)
      col_exist[i][numbers[i]] = false;
    dia_exist[0][diag_val1] = false;
    dia_exist[1][diag_val2] = false;

  } while (next_permutation(numbers, numbers + kTotalRow));

}

int main(void)
{
  search(0);
  return 0;
}


阅读(269) | 评论(0) | 转发(0) |
0

上一篇:关于内存管理

下一篇:没有了

给主人留下些什么吧!~~