poj2245 zoj 1089 bfs_水
2014-11-02 16:40
169 查看
这道题和uva 208 有点像,反正我都是用dfs 求得所有的路径,但是用排列组合也能做,用排列的做法以后再说吧,贴代码:
#include <iostream> #include <cstdlib> #include <cstdio> #include <memory.h> using namespace std; const int maxn = 15; int size; int casenum; int set[maxn];//记录所选数字 base 1 int path[maxn];//记录序列 base 1 int vis[maxn];// also base 1(现在想想应该不用这变量应该也行==) void init() { memset(vis, false, sizeof(vis)); for (int i = 1; i <= size; i++) scanf("%d", &set[i]); } void dfs(int cur, int now)//cur 处理目前序列中第几个数字,now目前数字位于set中第几个,从第几个开始取 { if (cur == 7) { for (int i = 1; i <= 6; i++) { printf("%d", path[i]); if (i != 6) printf(" "); } printf("\n"); return; } //size - now + 1 表示可选的剩余数字 要多于 还需要填入的数字(6- cur + 1) for (int i = now; (i <= size) && (size - now + 1 >= 6 - cur + 1); i++)//i 为当前cur起始位置 { if (!vis[i]) { vis[i] = true; path[cur] = set[i]; dfs(cur + 1, i + 1); vis[i] = false;//回溯一下 } } } int main() { freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); casenum = 1; while (EOF != scanf("%d", &size) && size != 0) { if (casenum != 1) printf("\n"); for (int i = 1; i <= size; i++) scanf("%d", &set[i]); dfs(1, 1); casenum++; } return 0; }
相关文章推荐
- zoj 3814 Sawtooth Puzzle(搜索-bfs)
- ZOJ 1136 Multiple BFS(POJ 1465)
- zoj 1671 Walking Ant 【BFS】
- ZOJ 1671 Walking ant(bfs)
- ZOJ 1671:Walking Ant【bfs】
- zoj 1671 Walking Ant 【BFS】
- 组合问题 ZOJ 1089 Lotto
- ZOJ 1649 Rescue(BFS)
- Bus Pass ZOJ 2913 BFS 最大中取最小的
- ZOJ 3781 Paint the Grid Reloaded 缩点+bfs
- UVALive2701 UVA1189 POJ1426 ZOJ1530 Find The Multiple【BFS】
- JOJ 1089 & ZOJ 1060 & poj 1094 Sorting It All Out (邻接表的栈拓扑排序模板)
- ZOJ 1649 Rescue (BFS)
- zoj 1649 bfs
- zoj 1091 Knight Moves (BFS)(情况用循环控制,值得学习啊)
- zoj--1089--Lotto---DFS VS 暴力求解
- ZOJ 1089--DFS--组合
- ZOJ 1438 Asteroids!--BFS(注意细节)
- ZOJ 2050BFS加位运算,这样节省了空间,由于4*4的空间太大状态数组存不下,看了别人的代码顿悟了!用二进制只要2^16-1=65535个数组便可存下。白色用状态1表示很色用0表示。
- 简单BFS ZOJ 1649 Rescue