广搜奇葩题
2024-09-22 11:31:34
发布于:浙江
#include<bits/stdc++.h>
using namespace std;struct node{int x,y,z,step;};int s,n,m;bool vis[110][110][110];int bfs(){queue<node>q;q.push({s,0,0,0});vis[s][0][0]=1;while(q.size()){node t=q.front();q.pop();if(t.x==t.y && t.z==0 || t.x==t.z && t.y==0 || t.y==t.z && t.x==0)return t.step;if(t.x>0){int tx,ty,tz;if(t.x+t.y<=n)tx=0,ty=t.x+t.y,tz=t.z;else tx=t.x-(n-t.y),ty=n,tz=t.z;if(!vis[tx][ty][tz]){q.push({tx,ty,tz,t.step+1});vis[tx][ty][tz]=1;}}if(t.x>0){int tx,ty,tz;if(t.x+t.z<=m)tx=0,ty=t.y,tz=t.x+t.z;else tx=t.x-(m-t.z),ty=t.y,tz=m;if(!vis[tx][ty][tz]){q.push({tx,ty,tz,t.step+1});vis[tx][ty][tz]=1;}}if(t.y>0){int tx,ty,tz;if(t.x+t.y<=s)tx=t.x+t.y,ty=0,tz=t.z;else tx=s,ty=t.y-(s-t.x),tz=t.z;if(!vis[tx][ty][tz]){q.push({tx,ty,tz,t.step+1});vis[tx][ty][tz]=1;}}if(t.y>0){int tx,ty,tz;if(t.y+t.z<=m)tx=t.x,ty=0,tz=t.y+t.z;else tx=t.x,ty=t.y-(m-t.z),tz=m;if(!vis[tx][ty][tz]){q.push({tx,ty,tz,t.step+1});vis[tx][ty][tz]=1;}}if(t.z>0){int tx,ty,tz;if(t.x+t.z<=s)tx=t.x+t.z,ty=t.y,tz=0;else tx=s,ty=t.y,tz=t.z-(s-t.x);if(!vis[tx][ty][tz]){q.push({tx,ty,tz,t.step+1});vis[tx][ty][tz]=1;}}if(t.z>0){int tx,ty,tz;if(t.y+t.z<=n)tx=t.x,ty=t.y+t.z,tz=0;else tx=t.x,ty=n,tz=t.z-(n-t.y);if(!vis[tx][ty][tz]){q.push({tx,ty,tz,t.step+1});vis[tx][ty][tz]=1;}}}return -1;}int main(){cin>>s>>n>>m;cout<<bfs();return 0;}
这里空空如也
有帮助,赞一个