排球队员站位问题(回溯法)
来源:http://blog.csdn.net/niuox/article/deta
- #include <iostream>
- using namespace std;
- int main()
- {
- int positionCan[6][6];/*运动员对于某个位置能不能站,0代表能,1代表能*/
- int position[6];/*运动员的最终站位*/
- int judge[6];//判断某个位置是否已经有人,1代表有人,0代表无人
- for (int i=0;i<6;i++)//运动员编号
- {
- for (int j = 0;j<6;j++)//位置编号
- {
- if (i == j)
- {
- positionCan[i][j] = 0;
- }
- else
- {
- positionCan[i][j] = 1;
- }
- }
- }
- for (int i=0;i<6;i++)
- {
- judge[i] = 0;//初始为0
- }
- for (int i=0;i<6;i++)
- {
- position[i] = -1;//刚开始,所有运动员都没有位置站
- }
- positionCan[0][4] = 0;//1号队员不在后排
- positionCan[0][5] = 0;//1号队员不在后排
- positionCan[1][4] = 0;//2号队员不是二传手
- positionCan[2][1] = 0;//3号队员不是二传手
- positionCan[2][4] = 0;//3号队员不是二传手
- positionCan[4][2] = 0;//5号队员不是副攻手
- positionCan[4][5] = 0;//5号队员不是副攻手
- positionCan[5][2] = 0;//6号队员不是副攻手
- positionCan[5][0] = 0;//6号队员不能站后排
- positionCan[5][4] = 0;//6号队员不能站后排
- int i=0,;
- int j=0;
- while (i<6)
- {
- j = 0;
- while (j<6)
- {
- if (i==3)//第四位运动员和第三位运动员不能在同一排
- {
- if (position[2] == 3)//如果3号队员站到了4号位(即唯一的前排可能),则4号队员应站后排
- {
- positionCan[3][1] = 0;
- positionCan[3][2] = 0;
- positionCan[3][3] = 0;
- }
- else
- {
- positionCan[3][0] = 0;
- positionCan[3][4] = 0;
- positionCan[3][5] = 0;
- }
- }
- else//如果回溯的话,需要对第四位队员进行恢复,否则会发生错误,因为它的站位限制不固定
- {
- for (int k=0;k<6;k++)
- {
- if (k!=3)
- {
- positionCan[3][k] = 1;
- }
- }
- }
- //可以站J号位,且此位无人
- if (positionCan[i][j] == 1 && judge[j] == 0)
- {
- judge[j] = 1;//i号运动员站j号位
- position[i] = j;//i号运动员站j号位
- i++;
- break;
- }
- else
- {
- j++;
- }
- while (j==6)//如果i号运动员没有找到可站的位置,则回溯
- {
- i--;
- j = position[i] + 1;
- judge[position[i]] = 0;//没有位置站
- position[i] = -1;//前一名运动员重新回到没有位置站的情况
- }
- }
- }
- for (int k = 0;k<6;k++)
- {
- cout<<"第"<<k+1<<"号队员的站位是:"<<position[k]+1<<endl;
- }
- return 0;
- }
运行结果:
- 顶
- 1
- 踩
排球队员站位问题(回溯法)相关推荐
- c语言编程排球队员站位问题,【排球课堂】一文看懂排球常识 解说总提的“卡轮”原来如此...
视频:sikana带你从零开始学排球:了解排球犯规的基本知识,时长约2分26秒 同学们好,欢迎来到排球课堂! 上一堂课,我们给大家介绍了与中国排球相关的世俱杯历史.下课后有小伙伴提出来,对排球比赛的基 ...
- 回溯法解决部落冲突问题
回溯法解决部落冲突问题 实验内容 问题描述 思路分析 方法步骤 实验代码 实验内容 原始部落byteland中的居民为了争抢有限的资源,经常发生冲突.几乎每个居民都有它的仇敌.部落酋长为了组织一支保卫 ...
- 【算法导论07】回溯法-旅行售货员问题
07回溯法-旅行售货员问题 问题描述: 已知有m个城市,城市之间由n条不同长度的道路相连.一个售货员从一座城市出发,途径所有城市,并最终回到原点,设计算法计算售货员所走的最短路径结点. 问题分析: 从 ...
- 算法设计与分析第5章 回溯法(二)【回溯法应用】
第5章 回溯法 5.2 应用范例 1.0-1背包问题 有n件物品和一个容量为c的背包.第i件物品的重量是w[i],价值是p[i].求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和 ...
- 算法设计与分析第5章 回溯法(一)【回溯法】
第5章 回溯法 5.1 回溯法 1.回溯法的提出 有许多问题,当需要找出它的解集或者要求回答什么解是满足某些约束条件的最佳解时,往往要使用回溯法. 2. 问题的解空间 (1)问题的解向量:回溯法希望 ...
- LeetCode 37. Sudoku Solver--数独求解(回溯法)--Java 3ms,Python 80ms 解法
题目地址: Write a program to solve a Sudoku puzzle by filling the empty cells. A sudoku solution must sa ...
- python 回溯法 子集树模板 系列 —— 3、0-1背包问题
问题 给定N个物品和一个背包.物品i的重量是Wi,其价值位Vi ,背包的容量为C.问应该如何选择装入背包的物品,使得放入背包的物品的总价值为最大? 分析 显然,放入背包的物品,是N个物品的所有子集的其 ...
- python回溯算法_什么是回溯法,Python解法交流?
只有去多做题,才能慢慢掌握.力扣leetcode-cn.com LeetCode 上的解释 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就 ...
- LeetCode Gray Code(回溯法)
问题:gray code是一种二进制数字系统,两个连续的数只有一位不同.给出一个正整数n,n表示gray code的位数,输出gray code. 思路:使用回溯法.通过枚举0,1,2,3的gray ...
最新文章
- 成人怎么学计算机英语单词,成人怎么从零开始学英语单词
- cat命令读取一部分_脚本攻略2 --命令之花
- python掷骰子期望_python_掷骰子游戏
- REVERSE-PRACTICE-BUUCTF-22
- 再论微服务架构之七宗罪
- oracle两表,有什么方法对Oracle两张表的数据比较呢?
- Git-第三篇廖雪峰Git教程学习笔记(2)回退修改,恢复文件
- 通信算法工程师调研整理
- 【Python基础】初识-与君初相识,犹如故人归
- ORACLE AutoVue 服务器/桌面版/WebService/SDK安装
- Java中常见的30道例题(附代码)
- alt.js 使用教程
- vue使用FullCalendar插件实现会议预约功能,个性化实现周视图
- 使用Fiddler抓取微信小程序二维码请求地址
- 键盘鼠标比厕所脏400倍当心电脑操作染疾病
- 如何能成为一个更优秀的人
- SpringBoot整合Swagger2/Swagger3之拦截器配置,无token放行swagger路径
- hdu——4540威威猫系列故事——打地鼠
- c# MessageBox.Show()
- BIOS-CXL RcrbAccessLib 源码解析
热门文章
- PC电脑桌面端UI设计规范
- 小程序分享到朋友圈图片绘制 Painter
- webrtc技术名词和关键技术要点:SVC,REMB,SVC...
- 解决找不到该项目,删除不掉的问题
- 什么是pyc文件,把python的py文件编译成pyc文件,把pyc文件反编译成py文件。以及python编译的如何设置不生成pyc文件
- 安卓应用开发 -- 柚信 -- “模仿微信即时通讯软件“
- 【计算机视觉】相机模型立体视觉
- 一个故事却看穿了许多人
- 现有三个表:学生表(学生id,姓名)、课程表(课程id,课程名)、学生选课表(学生id,课程id),请问要列出所有学生的选课情况(每个学生选了多少门课,分别是什么),请写出SQL语句
- 小玩意.包含全国省市区街道邮编的数据库