dalao求助

P1979 [NOIP2013 提高组] 华容道

................
by Qiuly @ 2019-01-13 11:46:30


我知道错误了
by 乐少 @ 2019-01-13 15:00:01


@[乐少](/space/show?uid=174838) dalao教教我把!ヘ(;´Д`ヘ) (之前期末考没来得及回复)
by Dark_Van @ 2019-01-23 15:45:28


加了判重之后就没解了... ```cpp #include<cstdio> #include<queue> #include<iostream> #include<cstring> #include<algorithm> #include<set> using namespace std; int n,m,t,g[31][31]={0},ex,ey,sx,sy,tx,ty,ans=2147483647; int dx[]={-1,1,0,0},dy[]={0,0,-1,1}; struct Node{ int ex,ey,sx,sy,dist; bool operator <(const Node &nodee)const{ dist>nodee.dist; } }; set<int> s; int m_code(Node &_node){ return _node.ex*1000000+_node.ey*10000+_node.sx*100+_node.sy; } void insert(Node &_node){ int code=m_code(_node); if(!s.count(code)) s.insert(code); } priority_queue<Node> q; int found=0; void bfs(){ Node start; start.ex=ex;start.ey=ey; start.sx=sx;start.sy=sy; start.dist=0; q.push(start); while(!q.empty()){ Node now=q.top();q.pop(); if(now.sx==tx&&now.sy==ty){ ans=min(ans,now.dist); found=1; } for(int i=0;i<4;i++){ int tex=now.ex+dx[i],tey=now.ey+dy[i],tsx,tsy; if(tex==now.sx&&tey==now.sy) tsx=now.ex,tsy=now.ey; if(g[tex][tey]==1){ Node tag; tag.ex=tex;tag.ey=tey; tag.sx=tsx;tag.sy=tsy; tag.dist=now.dist+1; //q.push(tag); insert(tag); } } } } int main(){ scanf("%d%d%d",&n,&m,&t); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&g[i][j]); while(t>0){ scanf("%d%d%d%d%d%d",&ex,&ey,&sx,&sy,&tx,&ty); ans=2147483647;found=0; bfs(); if(!found)printf("-1"); else printf("%d",ans); --t; } return 0; } ```
by Dark_Van @ 2019-01-23 16:24:18


终于打好了。。。 ```cpp #include<cstdio> #include<queue> #include<iostream> #include<cstring> #include<algorithm> using namespace std; int n,m,t,g[35][35]= {0},ex,ey,sx,sy,tx,ty; int dx[]= {0,-1,1,0,0},dy[]= {0,0,0,-1,1}; struct Node { int ex,ey,sx,sy,dist; }; int vis[35][35][35][35]= {0}; void bfs() { queue<Node> q; Node start; start.ex=ex; start.ey=ey; start.sx=sx; start.sy=sy; start.dist=0; q.push(start); vis[ex][ey][sx][sy]=1; while(!q.empty()) { Node fr=q.front(); q.pop(); if(fr.sx==tx&&fr.sy==ty) { printf("%d\n",fr.dist); return; } for(int i=0; i<=4; i++) { Node tag=fr; tag.ex=fr.ex+dx[i],tag.ey=fr.ey+dy[i]; if(g[tag.ex][tag.ey]) { tag.dist++; if(tag.ex==fr.sx&&tag.ey==fr.sy) { tag.sx=fr.ex; tag.sy=fr.ey; } if(!vis[tag.ex][tag.ey][tag.sx][tag.sy]) { vis[tag.ex][tag.ey][tag.sx][tag.sy]=1; q.push(tag); } } } } printf("-1\n"); } int main() { scanf("%d%d%d",&n,&m,&t); for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) scanf("%d",&g[i][j]); while(t--) { scanf("%d%d%d%d%d%d",&ex,&ey,&sx,&sy,&tx,&ty); memset(vis,0,sizeof(vis)); if(sx==tx&&sy==ty) { printf("0\n"); continue; } bfs(); } return 0; } ```
by Dark_Van @ 2019-01-24 10:56:08


|