HDU 1175 连连看
2012-10-13 15:17
501 查看
最近做题都是上百ms的节奏。。。
bfs暴搜。
bfs暴搜。
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<vector> #include<queue> using namespace std; const int maxN=1010; const int inf=1010; struct Point{ int turn[5],val; }p[maxN][maxN]; int x1,y1,x2,y2,dx[]={-1,1,0,0},dy[]={0,0,-1,1},n,m; bool bfs(){ queue<int> q; for(int i=0;i<4;++i){ int nx=x1+dx[i],ny=y1+dy[i]; if(nx==x2&&ny==y2) return true; if(nx>=0&&nx<n&&ny<m&&ny>=0&&p[nx][ny].val==0){ q.push(nx*m+ny); p[nx][ny].turn[i]=0; } } while(!q.empty()){ int u=q.front();q.pop(); int x=u/m,y=u%m; if(x==x2&&y==y2) return true; for(int i=0;i<4;++i){ int nx=x+dx[i],ny=y+dy[i]; if(nx==x2&&y2==ny) for(int j=0;j<4;++j) if(i==j){ if(p[x][y].turn[j]<=2) return true; } else{ if(p[x][y].turn[j]<2) return true; } if(nx>=0&&nx<n&&ny<m&&ny>=0&&p[nx][ny].val==0){ int kx=-1,ky=-1; for(int j=0;j<4;++j){ if(i==j){ if(p[nx][ny].turn[i]>p[x][y].turn[j]){ kx=nx;ky=ny; p[nx][ny].turn[i]=p[x][y].turn[j]; } } else{ if(p[x][y].turn[j]<2&&p[nx][ny].turn[i]>p[x][y].turn[j]+1){ kx=nx;ky=ny; p[nx][ny].turn[i]=p[x][y].turn[j]+1; } } } if(kx!=-1&&ky!=-1) q.push(kx*m+ky); } } } return false; } int main(){ #ifndef ONLINE_JUDGE freopen("a.in","r",stdin); //freopen("a.out","w",stdout); #endif while(cin>>n>>m,n||m){ for(int i=0;i<n;++i) for(int j=0;j<m;++j) cin>>p[i][j].val; int q; cin>>q; while(q--){ cin>>x1>>y1>>x2>>y2; x1--;y1--;x2--;y2--; if(p[x1][y1].val!=p[x2][y2].val||(p[x1][y1].val==0&&p[x2][y2].val==0)){ puts("NO"); continue; } for(int i=0;i<n;++i) for(int j=0;j<m;++j) for(int k=0;k<4;++k) p[i][j].turn[k]=inf; if(bfs()) puts("YES"); else puts("NO"); } } return 0; }
相关文章推荐
- hdu 1175 连连看
- HDU1175 连连看
- hdu1175 连连看
- 【DFS】hdu 1175 连连看
- HDU - 1175 连连看
- hdu 1175 连连看
- 连连看(hdu 1175)用队列实现广搜,并加入了动态规划
- HDU 1175(连连看)
- HDU 1175 连连看 (BFS处理转折点)
- hdu 1175 连连看
- hdu 1175 连连看 (DFS)
- hdu 1175 连连看 DFS解法。用来入门DFS是不错的
- HDU_1175 连连看(DFS)
- 【HDU 1175 连连看】 + DFS + 减枝
- HDU 1175 连连看 (BFS带方向的判定)
- HDU 1175 连连看(BFS)
- hdu(1175)连连看
- hdu1175——连连看
- hdu 1175 连连看 (简单DFS)
- hdu 1175 连连看 dfs