设为首页 加入收藏

TOP

C/C++:八皇后(一)
2013-04-24 12:14:23 】 浏览:1726
Tags:C/C 皇后

  #include <iostream>

  #include <cstdio>

  #include <ctime>

  #include <cmath>

  using namespace std;

  void queen(int** array, int row, FILE* fp);

  bool isAvailable(int** array, int y, int x);

  bool isResult(int** array);

  int main(int arg, char** argv) {

  int** array;

  // 分配空间

  array = new int* ;

  for (int i = 0; i < 8; i++) {

  array[i] = new int ;

  }

  // 初始化皇后状态

  for (int i = 0; i < 8; i++) {

  for (int j = 0; j < 8; j++) {

  array[i][j] = 0;

  }

  }

  FILE* fp = fopen("data.txt", "w");

  queen(array, 0, fp);

  fclose(fp);

  // 释放空间

  for (int i = 0; i < 8; i++) {

  delete[] array[i];

  }

  delete array;

  array = NULL;

  return 0;

  }

  void queen(int** array, int row, FILE* fp) {

  static int size = 1;

  if (row > 7) {

  return;

  }

  for (int j = 0; j < 8; j++) {

  // 如果合法

  if (isAvailable(array, row, j)) {

  array[row][j] = 1;

  // 当前位置合法,赋值后,进入下一行

  queen(array, row + 1, fp);

  // 如果退回来后是结果,则打印出来

  if (isResult(array)) {

  // 把结果写入文件

  fputc('\n', fp);

  fputs("***********************************", fp);

  fprintf(fp, " %d ", size++);

  fputs("***********************************", fp);

  fputc('\n', fp);

  for (int m = 0; m < 8; m++) {

  for (int n = 0; n < 8; n++) {

  if (array[m][n] == 1) {

  fputc('#', fp);

  fputc(' ', fp);

  fputc(' ', fp);

  } else {

  fputc('O', fp);

  fputc(' ', fp);

  fputc(' ', fp);

  }

  }

  fputc('\n', fp);

  }

  }

  array[row][j] = 0;

  }

  }

  }

  bool isAvailable(int** array, int row, int column) { // 第row行,column列

  int i, j;

  // 检查row行

  for (i = 0; i < 8; i++) {

  if (array[row][i] != 0) {

  return false;

  }

   

首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇标准C++中有四个类型转换符 下一篇C++:LIB和DLL的区别与使用

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目