poj 3669 Meteor Shower bfs水题
2015-05-16 19:05
471 查看
// poj 3669 bfs水题 // 预处理出每个坐标摧毁的时间,一遍bfs就可以了 // // 数组开始只开了325,一直tle。。然后看了discuss开了400 ac了。。。 // // 数组一定尽量开大点。。。哎,继续练吧。。。。 #include <algorithm> #include <bitset> #include <cassert> #include <cctype> #include <cfloat> #include <climits> #include <cmath> #include <complex> #include <cstdio> #include <cstdlib> #include <cstring> #include <ctime> #include <deque> #include <functional> #include <iostream> #include <list> #include <map> #include <numeric> #include <queue> #include <set> #include <stack> #include <vector> #define ceil(a,b) (((a)+(b)-1)/(b)) #define endl '\n' #define gcd __gcd #define highBit(x) (1ULL<<(63-__builtin_clzll(x))) #define popCount __builtin_popcountll typedef long long ll; using namespace std; const int MOD = 1000000007; const long double PI = acos(-1.L); template<class T> inline T lcm(const T& a, const T& b) { return a/gcd(a, b)*b; } template<class T> inline T lowBit(const T& x) { return x&-x; } template<class T> inline T maximize(T& a, const T& b) { return a=a<b?b:a; } template<class T> inline T minimize(T& a, const T& b) { return a=a<b?a:b; } const int maxn = 400; const int inf = 0x3f3f3f3f; int g[maxn][maxn]; struct node { int x; int y; int t; node(int xx,int yy,int tt){ x = xx; y = yy; t = tt; } }; int m; int vis[maxn][maxn]; const int dx[4] = {-1,0,1,0}; const int dy[4] = {0,1,0,-1}; void print(){ for (int i=0;i<6;i++){ for (int j=0;j<6;j++){ printf("%d ",vis[i][j]); } puts(""); } } void init(){ memset(g,inf,sizeof(g)); memset(vis,0,sizeof(vis)); int x,y,t; for (int i=0;i<m;i++){ scanf("%d%d%d",&x,&y,&t); g[x][y] = min(g[x][y],t); for (int j=0;j<4;j++){ int tx = x + dx[j]; int ty = y + dy[j]; if (tx<0||ty<0) continue; g[tx][ty] = min(g[tx][ty],t); } } } int bfs(){ queue<node> que; while(!que.empty()) que.pop(); que.push(node(0,0,0)); vis[0][0] = true; //int cnt = 0; while(!que.empty()){ node x = que.front(); que.pop(); // vis[x.x][x.y] = true; if (g[x.x][x.y] == inf){ return x.t; } //cnt++; for (int i=0;i<4;i++){ int tx = x.x + dx[i]; int ty = x.y + dy[i]; if (tx<0||ty<0) continue; if (vis[tx][ty]) continue; if (g[tx][ty]>x.t+1){ que.push(node(tx,ty,x.t+1)); vis[tx][ty] = 1; } } } return -1; } void solve(){ int flag = bfs(); //print(); printf("%d\n",flag); } int main() { //freopen("G:\\Code\\1.txt","r",stdin); while(scanf("%d",&m)!=EOF){ init(); solve(); } return 0; }
相关文章推荐
- poj 3669 Meteor Shower(bfs)
- POJ 3669 Meteor Shower (带时间轴的bfs)
- POJ 3669 Meteor Shower(BFS)
- 【POJ 3669 Meteor Shower】简单BFS
- POJ 3669 Meteor Shower(bfs)
- POJ 3669 Meteor Shower(BFS)
- Poj 3669 Meteor Shower【bfs】
- Meteor Shower (poj 3669 bfs)
- BFS——Poj 3669 Meteor Shower
- BFS:Meteor Shower(POJ 3669)
- POJ 3669-Meteor Shower [bfs] 《挑战程序设计竞赛》2.1
- bfs_poj_3669_Meteor Shower
- POJ - 3669 - Meteor Shower(bfs)
- POJ 3669 Meteor Shower BFS 水~
- poj 3669 Meteor Shower 【BFS】
- POJ 3669 Meteor Shower 普通BFS
- POJ 3669 Meteor Shower (bfs)
- POJ 3669 Meteor Shower BFS 水~
- POJ3669——Meteor Shower(BFS)
- poj 3669-Meteor Shower(简单bfs)