................
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