sicily 1135
2010-12-18 13:45
387 查看
这题一开始我是用dfs+剪枝做的(可连续飞行却只算一步这条件引发的,做下去应该可以的~),后来改用dfs,做得很顺利,提交,WA。。郁闷了,想了好久也想不出,后来请教了阿樵,发觉原来是总飞行路程是不能超过D,不是每一次飞行不能超过D,进行修改,但是还是WA。。最后研究发现了一个point:飞行一格跟移动一格的区别,好吧。。又WA。。原来是原来的代码没改好,再交,AC了!!
/* * test.cpp * * Created on: Dec 17, 2010 * Author: alfred */ #include <iostream> #include <queue> #include <string> #include <cstring> using namespace std; struct node { int x, y; int step; int flySteps; node(int x, int y, int step = 0, int flySteps = 0) { this->x = x; this->y = y; this->step = step; this->flySteps = flySteps; } }; bool isVis[101][101][4][101]; char data[101][101]; int m, n, D; int dx[] = {-1, 1, 0, 0}; int dy[] = {0, 0, -1, 1}; void bfs() { queue<node> q; memset(isVis[0][0], true, sizeof(isVis[0][0])); node tmp(0, 0, 0, 0); q.push(tmp); while(!q.empty()) { tmp = q.front(); q.pop(); if(tmp.x == m - 1 && tmp.y == n - 1) { cout << tmp.step << endl; return; } for(int i = 0; i < 4; i++) { int step = tmp.step + 1; int x = tmp.x; int y = tmp.y; int flySteps = tmp.flySteps; //just move x += dx[i]; y += dy[i]; if(x >= 0 && y >= 0 && x < m && y < n && !isVis[x][y][i][flySteps] && data[x][y] == 'P') { q.push(node(x, y, step, flySteps)); isVis[x][y][i][flySteps] = true; } //use flying x = tmp.x; y = tmp.y; flySteps++; for(; flySteps <= D; flySteps++) { x += dx[i]; y += dy[i]; if(!(x >= 0 && y >= 0 && x < m && y < n)) break; if(data[x][y] == 'L' || isVis[x][y][i][flySteps]) continue; q.push(node(x, y, step, flySteps)); isVis[x][y][i][flySteps] = true; } } } cout << "impossible" << endl; } int main() { while(cin >> m >> n >> D) { memset(isVis, false, sizeof(isVis)); memset(data, 0, sizeof(data)); for(int i = 0; i < m; i++) { cin >> data[i]; } data[m - 1][n - 1] = 'P'; bfs(); } }
相关文章推荐
- Sicily 1135. 飞越原野
- sicily 1135 飞越原野
- Sicily 1135 飞越原野
- sicily 1135 飞越原野 bfs
- sicily 1135 飞越原野
- Sicily 1135 飞越原野 (SOJ 1135) 【BFS 广度优先搜索】
- sicily 1135. 飞越原野
- <OJ_Sicily>1135飞越原野
- 【sicily】 1135.飞越原野
- sicily 1135 飞越原野
- sicily 1135 飞越原野
- Sicily 1135 飞越原野(BFS宽度优先搜索)
- sicily 1135 飞越原野(BFS)
- [sicily]1046. Plane Spotting
- 大数求模 sicily 1020
- sicily 1051. Biker's Trip Odomete
- sicily 1443 队列基本操作
- Sicily 1153. 马的周游问题 解题报告
- Sicily 1014. Specialized Four-Dig
- sicily 1014 Specialized Four-Dig