poj 2965 dfs+保存路径
2014-01-02 20:51
211 查看
/***首先叙述题意, 经过最小的次数使得原来的图全部变成‘-’ 暴力枚举 *****/ #include<iostream> #include<cstring> using namespace std; char mat[15][15]; int mmin = 100000; struct Node { int x,y; }pre[100], pre2[100]; bool solve(int x,int y) { if(x<0||x>=4||y<0||y>=4)return false; } void turn(int id) { int n = id / 4; int m = id % 4; for(int i=0;i<4;i++) { mat [i] == '+'?mat [i] = '-':mat [i] = '+'; if(i!=n) mat[i][m] == '+'?mat[i][m] = '-':mat[i][m] = '+'; } } bool judge() { for(int i=0;i<4;i++) for(int j=0;j<4;j++) { if(mat[i][j] != '-') return false; } return true; } void dfs(int id,int cn) { if(judge()) { if(cn < mmin){ mmin = cn; memcpy(pre2, pre, sizeof(pre)); // 记录路径 } return ; } if(id>=16)return ; dfs(id+1,cn); turn(id); pre[cn + 1].x = id / 4 + 1; // 记录路径 pre[cn + 1].y = id % 4 + 1; dfs(id+1,cn+1); turn(id); } int main() { int n,m; int icase; char c; for(int i=0;i<4;i++) for(int j=0;j<4;j++) { cin>>mat[i][j]; } dfs(0,0); cout<<mmin<<endl; for(int i = 1; i <= mmin; i++){ cout << pre2[i].x << " " << pre2[i].y << endl; } }
相关文章推荐
- poj 2965 The Pilots Brothers' refrigerator(dfs 枚举 +打印路径)
- POJ 2965 The Pilots Brothers' refrigerator(dfs+记录路径)
- poj 3984 BFS+DFS(保存路径)
- POJ-2965(DFS路径输出)
- poj 2965 The Pilots Brothers' refrigerator(dfs 枚举 +打印路径)
- 【BFS|位运算+输出路径】POJ-2965 The Pilots Brothers' refrigerator
- HDU1539Shredding Company(DFS+保存最优路径)
- poj 3984 迷宫问题【dfs+路径输出】
- poj2965(dfs暴力枚举)
- POJ 3984 迷宫【BFS+保存路径】
- poj 迷宫问题(路径记录)(DFS,BFS)
- poj 2965 The Pilots Brothers' refrigerator (dfs)
- poj 2965 The Pilots Brothers' refrigerator (迭代加深dfs)
- POJ 2488 A Knight's Journey(dfs + 打印路径)
- poj 3984迷宫问题(bfs求最短路径 类似并查集保存上个节点 保存最短路径)
- 【Floyd求最小环 && 保存路径】POJ - 1734 Sightseeing trip
- Poj 1062 (受限制的)最短路径 DFS
- poj 迷宫问题(路径记录)(DFS,BFS)
- poj1416 Shredding Company dfs 记录路径
- poj2965(枚举||dfs)