The Castle(USACO 2.1.1)
2015-09-18 13:53
363 查看
图的遍历,注意对边的处理,以及要合理地使用类
#include <iostream> #include <fstream> #include <string> //#define LOCAL #define MAXN 2510 using namespace std; #ifdef LOCAL ofstream fout ("out.txt"); ifstream fin ("in.txt"); #else ofstream fout ("castle.out"); ifstream fin ("castle.in"); #endif struct node { int key; int dir[4]; //四个方向的边是否存在 node() { for(int i = 0; i < 4; i++) dir[i] = 0; key = 2501; } }; int have[55][55]; node n[55][55]; int room[2510]; int x_num, y_num; int dx[] = {-1, 0, 0, 1}; // w s n e int dy[] = {0, 1, -1, 0}; char d[] = {'W', 'S', 'N', 'E'}; int key[] = {0, 2, 3, 1}; void dfs(int x, int y, int now) // 深搜找相邻 { //cout <<"4\n"; node &temp = n[x][y]; room[now]++; have[x][y] = 1; temp.key = now; //cout <<"5\n"; for (int i = 0; i < 4; ++i) { if(!temp.dir[i]) { int nx = x + dx[i]; int ny = y + dy[i]; if(nx<0 || nx > MAXN || ny < 0 || ny > MAXN) continue; if(!have[nx][ny]) dfs(nx, ny, now); } } //cout <<"6\n"; return; } int main() { fin >> x_num >> y_num; for (int i = 1; i <= y_num; ++i) for (int j = 1; j <= x_num; ++j) { int temp; fin >> temp; int k = 0; while(temp) { if(temp&1) { n[j][i].dir[key[k]] = 1; // 1 then, have wall } temp >>= 1; k++; } } //cout << "1\n"; int temp_key = 0; for(int i = 1; i <= x_num; i++) for (int j = 1; j <= y_num; ++j) { if(!have[i][j]) { //cout << "3\n"; dfs(i, j, temp_key); temp_key++; } } //cout << "2\n"; int max1 = -1; int max2 = -1; int resx; int resy; char resc; for (int i = 1; i <= x_num; ++i) { for (int j = y_num; j >= 1; --j) { max1 = max(max1, room[n[i][j].key]); int temp2; for(int k = 0; k < 4; k++) { if(n[i][j].dir[k]&&(n[i][j].key != n[i+dx[k]][j+dy[k]].key)) { if(max2 < (room[n[i][j].key] + room[n[i+dx[k]][j+dy[k]].key])) { resx = i; resy = j; resc = d[k]; max2 = (room[n[i][j].key] + room[n[i+dx[k]][j+dy[k]].key]); } } } } } fout<<temp_key<<'\n'<<max1<<'\n'<<max2<<'\n'; fout<<resy<<' '<<resx<<' '<<resc<<'\n'; return 0; }
相关文章推荐
- 一道面试题Lintcode196-Find the Missing Number
- 百度翻译API请求
- OpenCV for Ios 学习笔记(9)-用OPENGL渲染AR场景2
- css3新属性placeholder兼容ie7/ie8
- 面试题总结-new 和malloc 区别
- 线程与进程
- activity 中的相关配置小结
- 解决rabbitmq 不能启动的问题
- 实现1.add(1).add(2).add(3)……的级联叠加
- X264 利用MinGW 在windows 下的编译
- struts2请求的URL的搜索路径的顺序概述
- shell中if做比较
- 数字如何转换成ASCII码字符――谭浩强C课后题4.9
- iOS学习内容总结
- C++中string的用法 string字符串的使用方法
- Contains Duplicate II
- Random产生随机数问题
- org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML doc
- 迷宫最短路径问题
- Test:开通博客