USACO Snail Trails 解题报告
来源:互联网 发布:武汉矩阵互动 编辑:程序博客网 时间:2024/06/05 20:44
这道题就是一道DFS搜索题,我是按照自己习惯的方式进行的,进去之后就mark,出来前unmark。主要是需要看清题,即如果能走的话一直往前走,否则,需要看是否遇到障碍了,如果遇到的是之前走过的点就只能停了。前者的情况可以左转或右转。所以这道题我也保留了方向。
/* ID: thestor1 LANG: C++ TASK: snail */#include <iostream>#include <fstream> #include <cmath> #include <cstdio> #include <cstring> #include <climits> #include <cassert> #include <string> #include <vector> #include <set>#include <map> #include <queue> #include <stack> #include <algorithm>using namespace std;bool isIn(int r, int c, int N){return 0 <= r && r < N && 0 <= c && c < N;}void search(vector<std::vector<int> > &grid, int r, int c, int d, int cnt, int &largest){// cout<<"[debug]r: "<<r<<", c: "<<c<<endl;if (cnt > largest){largest = cnt;// cout<<"[debug]largest: "<<largest<<endl;}grid[r][c] = 1;int N = grid.size();int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};int nr = r + dx[d], nc = c + dy[d];if (isIn(nr, nc, N) && !grid[nr][nc]){search(grid, nr, nc, d, cnt + 1, largest);}else if (!isIn(nr, nc, N) || grid[nr][nc] == 2){int turn[] = {-1, 1};for (int t = 0; t < 2; ++t){int nd = (d + 4 + turn[t]) % 4;nr = r + dx[nd];nc = c + dy[nd];if (isIn(nr, nc, N) && !grid[nr][nc]){search(grid, nr, nc, nd, cnt + 1, largest);}}}grid[r][c] = 0;}int main(){ifstream fin("snail.in");ofstream fout("snail.out");int N, B;fin>>N>>B;std::vector<std::vector<int> > grid(N, std::vector<int>(N, 0));for (int i = 0; i < B; ++i){char c;int r;fin>>c>>r;// cout<<"r: "<<r<<", c: "<<c<<endl;grid[r - 1][c - 'A'] = 2;}grid[0][0] = 1;// for (int r = 0; r < N; ++r)// {// for (int c = 0; c < N; ++c)// {// if (grid[r][c])// {// cout<<'#';// }// else// {// cout<<'.';// }// }// cout<<endl;// }int largest = 0;search(grid, 0, 0, 1, 1, largest);// cout<<"[debug]after first search: "<<endl;// for (int r = 0; r < N; ++r)// {// for (int c = 0; c < N; ++c)// {// if (grid[r][c])// {// cout<<'#';// }// else// {// cout<<'.';// }// }// cout<<endl;// }search(grid, 0, 0, 2, 1, largest);fout<<largest<<endl;fin.close();fout.close();return 0; }
0 0
- USACO Snail Trails 解题报告
- USACO 5.2 Snail Trails
- usaco snail trails(dfs)
- usaco 5.1.2 Snail Trails
- usaco 5.2 Snail Trails(DFS)
- usaco training 5.2.1 Snail Trails 题解
- Snail Trails
- 【USACO题库】5.2.1 Snail Trails蜗牛的旅行
- 【USACO题库】5.2.1 Snail Trails蜗牛的旅行
- JZOJ1315.【USACO题库】5.2.1 Snail Trails蜗牛的旅行
- C++——【USACO 5.2.1】——Snail Trails
- USACO5.2.1 Snail Trails(snail)
- Section 5.2 Snail Trails
- [USACO5.2]Snail Trails
- USACO:Overfencing解题报告
- usaco Transformations 解题报告
- USACO Stringsobits 解题报告
- USACO Camelot 解题报告
- Android APK加壳技术方案
- How to Recreate OCR / Voting Disk Accidentally Deleted [ID 399482.1]
- Java中的System类
- 3高并发服务器:多路IO之epoll
- struts2
- USACO Snail Trails 解题报告
- 一个三流大学生的北京三年
- UNDO损坏修复
- rails 数据库修改字段
- Ubuntu 14.04双显卡(N+i)完美解决方案
- Javassist学习1:简介
- 用ClickOnce通过IIS7发布WinForm应用程序(VS2013)
- 颜色十六进制参考
- ubuntu14.04 chrome显示乱码问题