Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
各位大牛帮下忙,wa了N次了(代码还比较清晰)#include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<vector> #include<queue> #include<stack> #include<bitset> #include<map> #define Max(a,b) ((a)>(b)?(a):(b)) #define Min(a,b) ((a)<(b)?(a):(b)) #define mem(x,a) memset(x,a,sizeof(x)) #define sq(x) ((x)*(x)) const double pi=cos(-1.0); using namespace std; class T { public: int x,y,t; }a[50010]; int v[310][310]; int dir[5][2]={1,0,0,1,-1,0,0,-1,0,0}; bool u[310][310]; queue<T>Q; bool ok(int x,int y) { if(x>=0 && y>=0 && !u[x][y]) return 1; return 0; } void init() { int n,i,j,tx,ty; mem(v,0); mem(u,0); scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].t); } for(i=0;i<n;i++) for(j=0;j<5;j++) { tx=a[i].x+dir[j][0]; ty=a[i].y+dir[j][1]; if(!ok(tx,ty)) continue; if(v[tx][ty]>a[i].t || v[tx][ty]==0) v[tx][ty]=a[i].t; } } void solve() { T st,cur,nt; st.x=st.y=st.t=0; u[0][0]=1; Q.push(st); if(v[0][0]==0){printf("-1\n");return;} while(!Q.empty()) { cur=Q.front(); Q.pop(); for(int i=0;i<4;i++) { nt.x=cur.x+dir[i][0]; nt.y=cur.y+dir[i][1]; nt.t=cur.t+1; if(ok(nt.x,nt.y)) { u[nt.x][nt.y]=1; if(v[nt.x][nt.y]==0) { printf("%d\n",nt.t); return; } if(nt.t<v[nt.x][nt.y]) { Q.push(nt); } } } } printf("-1\n"); } int main() { init(); solve(); system("pause"); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator