id1321的基础强化报告.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
id1321的基础强化报告

学 号: 课 程 设 计 (基础强化训练) 题 目 棋盘问题 学 院 计算机科学与技术学院 专 业 软件工程 班 级 姓 名 ....... 指导教师 鄢红国 2013 年 7 月 11 日 课程设计任务书 学生姓名: ... 专业班级: 软件工程ZY1102 指导教师: ... 工作单位: 计算机学院 题 目: 棋盘问题 初始条件: 输入: 输入含有多组测试数据。 每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n = 8 , k = n 当为-1 -1时表示输入结束。 随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, 表示空白区域(数据保证不出现多余的空白行或者空白列)。 对于每一组数据,给出一行输出,输出摆放的方案数目C (数据保证C2^31)。2013-7-8到2013-7-12 消化资料、系统调查、形式描述 1天 系统分析、总体设计、实施计划 3天 撰写课程设计报告书 1天 指导教师签名: 2013年 7 月 8日 系主任(或责任教师)签名: 2013年 7 月 8日 目录 1 注册资料 4 2 选题描述 4 3 算法分析 5 4 程序流程图 6 5 程序源码 7 6 试算截屏图 9 7 分析与总结 10 8 参考文献 10 棋盘问题 1 注册资料 用户名:139.... 密码:0739...... 选题题号:1321 2 选题描述 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。输入含有多组测试数据。 每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n = 8 , k = n 当为-1 -1时表示输入结束。 随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, 表示空白区域(数据保证不出现多余的空白行或者空白列)。2 1 #. .# 4 4 ...# ..#. .#.. #... -1 -1 样例输出: 2 1 3 算法分析 本题中,要在自己给出的棋盘上放棋子,且摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列 void find(int row,int l) //row为棋盘行数,从0开始计数,l为棋子数 { if(l==0) //当棋子数为0时,方案ans加1 { ans++; return ; } if(rown) //行数大于棋盘行数时,不再遍历,返回上一级 return ; for(int i=0;in;i++) //寻找可以放棋子的点 if(map[row][i]==#flag[i]==0) //满足这两个条件则找到一个合适的点 { flag[i]=1; //第i列的点不能再放棋子 find(row+1,l-1); //到该点的下一行去找可以放棋子的点 flag[i]=0; //当下一行找完返回上一级时状态置0 } find(row+1,l); //当上一行没找到时继续下一行寻找 } 4 程序流程图 y n n y y 递归 递归 图1 find()函数的流程图 图2 程序主流程图 5 程序源码 #includeiostream using namespace std; char map[10][10]; //存储棋盘的形状 int flag[10]; //用来标记该列是否能放棋子 int n,k; int ans; //解决方案的数目 void find(int row,int l) //row为棋盘行数,从0开始计数,l为棋子数 {

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档