乒乓球比赛日程
来源:互联网 发布:淘宝换货流程 编辑:程序博客网 时间:2024/05/01 20:35
如果8皇后问题能理解,这题就是小开撕,http://blog.csdn.net/qq_33193309/article/details/55190608
题目 某学校举行乒乓球比赛,在初赛阶段设置为循环赛,设有n位选手参赛,初赛共进行N-1天,每位选手要与其他每一位选手进行一场比赛,然后按照积分排名选拔进入决赛的选手,根据学校作息时间,要求每位选手每天必须比赛一场,不能轮空。
想想方法有好多。也可以用分治,但是分治之后合并我感觉我有点麻烦,不如直接回溯来的简单
和八皇后不同的是,八皇后记住当前行的列就行,这题需要记住每一行的每一列。没事加一个循环即可。
说下思路:
1.从第一行起,先进行判断(每一行不能重复,列也不能重复...好像数独哦) 找到每一列能放置的对手
2.如果当前行放置的列到达了最大,进行下一行的放置,否则寻找当前行的下一列
3.最后就是输出啦
#include<iostream>#include<algorithm>using namespace std;#define N 8int a[N+1][N+1];int pd(int i, int j,int n){//这里面的判断就比八皇后简单好多for (int k = 0; k < N; k++){if (a[k][j] == n || a[i][k] == n)return 0;}return 1;}void f(int i, int j){if (i == N || j == N){for (int k = 0; k < N; k++){for (int l = 0; l < N; l++)printf("%d ", a[k][l]);printf("\n");}exit(0);//这里就直接输出一种方法了}else{for (int k = j; k < N; k++){for (int n = 1; n <= N; n++){//这里就是与八皇后的不同,需要加一个循环对每一个都进行放置if (pd(i, k,n)){a[i][k] = n;if (k == N-1)//到达最后一列,进行下一行f(i + 1, 1);else f(i, k + 1); //否则进行下一列}}}}}int main(){for (int i = 0; i < N; i++)a[i][0] = i + 1;//因为初始的每个选手固定。复制一下f(0, 1);return 0;}
0 0
- 乒乓球比赛日程
- 乒乓球比赛
- 乒乓球比赛
- 乒乓球比赛
- 乒乓球比赛
- 乒乓球单打比赛程序模拟
- 猴子吃桃&乒乓球比赛
- 分治算法---乒乓球比赛日程安排
- 2017研究生乒乓球比赛记录
- 拿下园区乒乓球比赛团体冠军
- RF在乒乓球比赛中的作用
- 【程序8】乒乓球比赛赛程安排
- 29-乒乓球比赛对战名单分析
- 分治算法:乒乓球比赛的日程安排
- Golang -- goroutine实例(乒乓球双打比赛)
- 球员比赛属性说明与日程简介
- java 递归实现循环比赛日程
- 乒乓球
- 动态规划之最长递增子序列
- js简单截取方法
- jquery绑定事件注意问题
- Java中的堆内存和栈内存
- 一些unity资源
- 乒乓球比赛日程
- echarts 几种常见的图表的实现及源码
- hadoop2.7.3集群环境搭建
- tomcat调优
- 文章标题
- 网络知识总结(持续补充)
- LOG4CPLUS配置文件例
- a20android镜像打包解包
- [leetCode刷题笔记]2017.02.14