写了一个八皇后问题的代码
2010-11-02 18:38
246 查看
经典的问题,不过以前没有做过,今天动手写了一个,效率不是很高,但思想是有一点的,最主要是判断斜线的方法,用x+y和x-y来判断。
1: #include <iostream>
2:
3: using namespace std;
4: #define N 8
5:
6: void show(int A )
7: {
8: static int count = 0;
9: cout << ++count << endl;
10: for (int i = 0; i < N; i++)
11: {
12: for (int j = 0; j < N; j++)
13: {
14: if (A[i][j] == 1)
15: {
16: cout << "W ";
17: }
18: else
19: {
20: cout << "- ";
21: }
22: }
23: cout << endl;
24: }
25: cout << endl;
26: }
27:
28: bool check(int A , int x, int y)
29: {
30: int sum = x + y;
31: int sub = x - y;
32: for (int i = 0; i < N; i++)
33: {
34: if (x != i && A[i][y] == 1)
35: {
36: return false;
37: }
38: for (int j = 0; j < N; j++)
39: {
40: if (j == y)
41: {
42: continue;
43: }
44: if (A[x][j] == 1)
45: {
46: return false;
47: }
48: if (i + j == sum && A[i][j] == 1)
49: {
50: return false;
51: }
52: if (i - j == sub && A[i][j] == 1)
53: {
54: return false;
55: }
56: }
57: }
58:
59: return true;
60: }
61:
62: void putQueen(int A , int row)
63: {
64: if (row >= N)
65: {
66: show(A);
67: return;
68: }
69:
70: for (int i = 0; i < N; i++)
71: {
72: A[row][i] = 1;
73:
74: if (check(A, row, i) != false)
75: {
76: putQueen(A, row + 1);
77: }
78:
79: A[row][i] = 0;
80: }
81:
82: return;
83: }
84:
85: void run(int x )
86: {
87: putQueen(x, 0);
88: }
89:
90: int main()
91: {
92: int X = {0};
93: run(X);
94: system("pause");
95: return 0;
96: }
相关文章推荐
- asp.net 的一个新bug. 当你的程序出问题时, 不仅仅要检查自己的代码和逻辑, 还要检查微软的代码, 累吗?
- laravel,视图文件将变量代码注释,会出现的一个怪现象
- 一个封装好的dialog工具类,减少重复的代码,简洁又方便使用!
- 一个用js实现控制台控件的代码
- 代码干货 | 一个Reentrant Error引发的对Python信号机制的探索和思考
- 一个shell写的urldecode代码
- 脚本演示的天堂:共享一个可以提供代码示例和运行结果的非常不错的网站
- redis的一个操作的代码执行流程
- abap--一个简单类浏览器的代码(等有空继续完善)
- 一个JS分页效果代码
- 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- Linux内核设计第四周学习总结 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- 用vue写一个仿简书的轮播图的示例代码
- 备份mysql数据库的php代码(一个表一个文件)
- 一个“网页加载中”的特效代码 - 4ngel's blog - 京华志
- mark一个AndroidStudio的坑,clean不刷新代码,build出错
- [转]一个girl用C写的爱情代码!!
- [编程代码]一个linux下的gcc/c语言makefile
- 一个简单的三层结构ASP.NET代码
- 评判一个代码或者系统设计的好坏的原则