妹子,七旬老奶奶,刚上三年级,求助

P4011 孤岛营救问题

很好奇三个关键词怎么放在一起的QAQ
by qian_shang @ 2019-11-05 17:04:50


太弱了,一直留级。
by desize @ 2019-11-05 17:06:36


17岁高三吗 不太科学
by OvOAuto @ 2019-11-05 17:06:41


~~不是暴力BFS就能过吗QAQ~~
by 南欺姬 @ 2019-11-05 17:15:55


加了点注释。 ```cpp #include<bits/stdc++.h> using namespace std; int n,m,p,k,enge[12][12][12][12],pd[12][12][12][12],v[32770][12][12]; long long d[32770][12][12]; int xx[4]={0,0,-1,1},yy[4]={-1,1,0,0}; int s,ys[12][12]; struct dsz{ int x,y,zt; long long sj; }; bool operator <(const dsz &a,const dsz &b) { return a.sj<b.sj; } priority_queue<dsz> q; int main() { memset(ys,0,sizeof(ys)); memset(pd,0x3f3f3f3f,sizeof(pd)); memset(enge,0x3f3f3f3f,sizeof(enge));//初始所有道路不能行走 scanf("%d%d%d%d",&n,&m,&p,&k); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) for(int k=0;k<4;k++) if(i+xx[k]>=1&&i+xx[k]<=n &&j+yy[k]>=1&&j+yy[k]<=m) enge[i][j][i+xx[k]][j+yy[k]]=1;//相邻点可走 for(int i=1;i<=k;i++) { int x1,x2,y1,y2,g; scanf("%d%d%d%d%d",&x1,&x2,&y1,&y2,&g); if(g==0) { enge[x1][x2][y1][y2]=1061109567; enge[y1][y2][x1][x2]=1061109567;//墙不能走 } else { pd[x1][x2][y1][y2]=g-1; pd[y1][y2][x1][x2]=g-1;//存储门的位置 } } scanf("%d",&s); for(int i=0;i<s;i++) { int x,y,q; scanf("%d%d%d",&x,&y,&q); ys[x][y]|=(1<<(q-1));//存储钥匙的位置 } memset(d,0x3F3F3F3F,sizeof(d)); memset(v,0,sizeof(v)); d[ys[1][1]][1][1]=0;//起点如果有钥匙就存储 dsz qd={1,1,ys[1][1],0}; q.push(qd); while(!q.empty()) { dsz x=q.top(); q.pop(); if(v[x.zt][x.x][x.y]) continue; v[x.zt][x.x][x.y]=1; for(int k=0;k<4;k++) { if(x.x+xx[k]<1||x.x+xx[k]>n ||x.y+yy[k]<1||x.y+yy[k]>m//越界判断 ||enge[x.x][x.y][x.x+xx[k]][x.y+yy[k]]==1061109567//墙不能走 ||enge[x.x][x.y][x.x+xx[k]][x.y+yy[k]]==1//无门或有钥匙可走 &&pd[x.x][x.y][x.x+xx[k]][x.y+yy[k]]!=1061109567 &&!((x.zt>>pd[x.x][x.y][x.x+xx[k]][x.y+yy[k]])&1)) continue; int xy=x.x+xx[k],yx=x.y+yy[k]; int op=x.zt|ys[xy][yx]; if(d[op][xy][yx]>d[x.zt][x.x][x.y]+1) { d[op][xy][yx]=d[x.zt][x.x][x.y]+1; if(xy==n&&yx==m) { printf("%lld",d[op][xy][yx]);//输出 return 0; } dsz y={xy,yx,op,d[op][xy][yx]}; q.push(y); } } } printf("-1"); return 0; } ```
by desize @ 2019-11-14 19:37:57


你这个敌劫的运算符重载怎么不是很一样……
by _MRCMRC_ @ 2019-11-14 19:48:16


并且这题最短路方法貌似会更麻烦吧
by _MRCMRC_ @ 2019-11-14 19:48:39


![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pLmxvbGkubmV0LzIwMTkvMDgvMTMvQmE5VnhNNmdrcDNDdnFRLmpwZw)
by desize @ 2019-11-14 19:56:55


![](https://cdn.luogu.com.cn/upload/image_hosting/nqq32z0r.png)
by desize @ 2019-11-14 19:57:27


@[北冥、流风](/user/112742) 感谢大佬,是我sb了,运算符重载打反了。
by desize @ 2019-11-14 19:58:42


| 下一页