摘要: 面积 思路:实际与填涂颜色差不多 建立数组xx和数组yy, 分别表示每一次操作横纵坐标的对应长度。 将输入的10*10方阵外面加上一圈0,第一个入队. 然后从第一个点(队首)向周围扩展,若扩展到的点在棋盘里且没有被搜到标记过,就入队并标记。 当队首向外扩展完了,让当前队首出队,再由下一个队首继续向外 阅读全文
posted @ 2022-08-24 21:43 shanyingrui 阅读(91) 评论(0) 推荐(0) 编辑
摘要: 填涂颜色 思路: 建立数组xx和数组yy, 分别表示每一次操作横纵坐标的对应长度。 将输入的方阵外面加上一圈0,第一个入队. 然后从涂色的最开始(队首)向周围扩展,若扩展到的点在棋盘里且没有被搜到标记过,就入队并标记。 当队首向外扩展完了,让当前队首出队,再由下一个队首继续向外扩展寻找. 输出时分2 阅读全文
posted @ 2022-08-24 17:14 shanyingrui 阅读(68) 评论(0) 推荐(0) 编辑
摘要: 马的遍历 思路:首先要知道马走日字,可以走8个方向. 建立数组a和数组b,分别表示马一步可以走的横纵坐标的对应长度。 然后从马的起始位置(队首)开始向周围扩展,并依次记录步数。若扩展到的点在棋盘里且没有被搜到过,就入列。 当队首向外扩展完了,让当前队首出队,再由下一个队首继续向外扩展寻找.最后如果没 阅读全文
posted @ 2022-08-24 14:18 shanyingrui 阅读(448) 评论(0) 推荐(0) 编辑
摘要: Dfs: 深度优先搜索. 它是将当前状态按照一定的规则顺序,先拓展一步得到一个新状态,再对这个新状态递归拓展下去。如果无法拓展,则退回一步到上一个状态,再按照原先设定的规则顺序重新寻找一个状态拓展。如此搜索,直至找到目标状态,或者遍历完所有状态。所以,深度优先搜索也是一种“盲目”搜索(一条路走到黑) 阅读全文
posted @ 2022-08-23 21:13 shanyingrui 阅读(23) 评论(0) 推荐(0) 编辑
摘要: next_permutation函数将按字母表顺序生成给定序列的下一个较大的排列,直到整个序列为升序为止。prev_permutation函数与之相反,是生成给定序列的上一个较小的排列。 这是一个求一个排序的下一个排列的函数,可以遍历全排列,要包含头文件<algorithm> 使用方法:next_p 阅读全文
posted @ 2022-08-23 20:56 shanyingrui 阅读(212) 评论(0) 推荐(0) 编辑
摘要: [2002年NOIP普及组] 选数 思路:从第一个数a[1]开始深搜,数字u个数+1,可以选择让它参与序列或不。 若它参与,则数字和sum+a[u],要与k比较的nums+1(表示序列的个数);反之,不改变; 最后使各个数字分别排列组合成新的序列.新的序列必须满足和为素数才算数,最后输出满足条件的序 阅读全文
posted @ 2022-08-23 17:07 shanyingrui 阅读(239) 评论(0) 推荐(0) 编辑
摘要: N皇后问题 已知在 N*N 的棋盘上放置 N 个皇后(n<=10)而彼此不受攻击(即在棋盘的任一行,任一列和任一对角线上不能放置 2 个皇后). 思路: 定义一个函数,函数里的变量用于计数。数组用于放数,数组b表示位置标记(使皇后互不攻击)。从第一个皇后开始深搜,搜索时运用回溯判定即可。然后就是找出 阅读全文
posted @ 2022-08-23 16:40 shanyingrui 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 全排列问题 思路: 定义一个函数,函数里的变量用于计数。数组a用于放数,数组b表示位置标记(为了方便在一个序列中数字不重复)。从1开始深搜,搜索时运用回溯判定即可。然后就是找出口,出口当然是搜索次数 大于n或者等于n + 1的时候,进行输出。 #include<iostream> #include< 阅读全文
posted @ 2022-08-23 14:22 shanyingrui 阅读(14) 评论(0) 推荐(0) 编辑
摘要: 切绳子 思路:运用二分查找,与木材加工题的思路相同。 只是这个是针对浮点数的,多了将绳子长度转化为整形,最后输出再转回高精度。 代码如下: #include<iostream> using namespace std; int n,k; int len[1000010]; bool check(in 阅读全文
posted @ 2022-08-22 21:50 shanyingrui 阅读(81) 评论(0) 推荐(0) 编辑
摘要: 木材加工 思路:二分查找。 从木棍长度的中间分别向两边找,直至找出既满足木棍个数 长度又长的木棍长度。 代码如下: #include<iostream> using namespace std; int n,k; int len[1000010]; bool check(int mid)//mid为 阅读全文
posted @ 2022-08-22 20:17 shanyingrui 阅读(148) 评论(0) 推荐(0) 编辑