[C++]数据结构:算法分析之八皇后问题
2012-11-28 22:43
435 查看
/************************************************************************/ /* 八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题。 /* 该问题是十九世纪著名的数学家高斯1850年提出: /* 在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击, /* 即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 /************************************************************************/ // 使用position数组来存储皇后的摆放位置。 // 例如:position[2]=4 // 表示第2行的皇后放在了第4列。 // 第0列开始依次遍历。 // 代码中每次摆放成功便输出position数组以便于理解。 // 可先输入Queen=5看一下摆放的原理。 #include <iostream> #include <math.h> #include <malloc.h> using namespace std; int *position; //用数组放置的位置,p=position[i]:第i行的皇后在第p列 int queens; //皇后数目 int count; //第N种可能性 //判断第n行是否放置皇后 bool SignPoint(int n) { for (int i=0;i<n;i++) { if (position[i] == position ) //该列已经放置过皇后了 return false; if (abs(position[i] - position ) == n-i) //对角线已经放置过了 return false; } return true; } //在第n列摆放皇后皇后 //默认是从第0列开始 void SetQueen(int n=0) { if (queens==n)//如果相等则表示排列到了最后一列,将结果输出 { cout<<"No."<<++count<<endl; for (int i=0;i<queens;i++) //遍历每一行 { for (int j=0;j<queens;j++) //遍历每一列 { if (j == position[i]) { cout<<j<<" "; //如果列数等于position中存储的列数则将该列数输出 } else { cout<<"* "; //否则输出*表示不放皇后 } } cout<<endl; } for (int t=0;t<queens;t++) //输出position数组 { cout<<"position["<<t<<"]="<<position[t]<<endl; } cout<<endl; return; } else //如果不相等则开始将皇后放到这一列 { for (int i=0;i<queens;i++) //准备将皇后摆在第i行 { position = i; //将皇后摆到了第n行,存储的列数为i进行校验 if(SignPoint(n)) //如果该位置放置皇后正确的话 { SetQueen(n+1); //继续摆放下一列的皇后 } } } } int main() { cout<<"请输入皇后的总数:"<<endl; cin>>queens; position = new int[queens]; SetQueen(); cout<<"摆放完毕"<<endl; return 0; }
相关文章推荐
- 【数据结构与算法】八皇后问题之递归
- 数据结构与算法2:八皇后问题
- 数据结构与算法分析:C++描述(Mark Allen Weiss) 和 数据结构(刘大有)笔记
- 数据结构与算法笔记 lesson 16 八皇后问题
- 数据结构据与算法分析中的最大字数列求解问题
- 数据结构与算法——B树的C++实现
- 数据结构与算法问题 欧拉回路
- 数据结构与算法[LeetCode]—两个有序数组合并及找中点问题
- 重新开始战斗18-数据结构与算法-01背包问题
- 数据结构与算法实验题 11.3 最小权语言问题
- 【数据结构与算法】链表问题集锦
- 数据结构与算法C++描述(12)---堆及最大堆
- 数据结构与算法问题 二叉搜索树
- C++队列模拟银行排队叫号(加州大学伯克利分校计算机专业数据结构与算法作业)
- 【数据结构与算法】二叉树给定两个节点的最短距离(C++实现)
- 7.[数据结构和算法分析笔记]词典 Dictionary
- 算法与数据结构基础8:C++实现有向图——邻接表存储
- 数据结构与算法——无权最短路径算法的C++实现
- 数据结构与算法实验题 11.3 最小权语言问题
- 二叉堆 build算法 c++ 数据结构与算法