虾皮第二题.机器人那道题
求大佬帮忙,我已经搞吐了,在本地用win和linux分别 使用c++11 ,c++98,struct 和pair 跑了8遍以上。都没问题。但是在提交的时候就是编译错误。有点炸。
想知道为啥 编译错误。
思路是 二分答案,思路不是特别对,若是加上回溯可能可以。
但是代码就不过就很离谱。
#include <bits/stdc++.h>
using namespace std;
struct node{
int x,y,z;
node(int _x,int _y,int _z){x=_x;y=_y;z=_z;};
};
bool solve22(int val,vector<vector<int> >&rooms,vector<int>&sta,vector<int>end2){
int fx[5][3];
fx[0][0]=1;
fx[0][1]=0;
fx[1][0]=-1;
fx[1][1]=0;
fx[2][0]=0;
fx[2][1]=1;
fx[3][0]=0;
fx[3][1]=-1;// 这个方向数组,是担心初始化列表有问题。就改了
// queue<pair<pair<int,int>,int> >q;
//q.push(make_pair(make_pair(sta[0],sta[1]),val+rooms[sta[0]][sta[1]]));
queue<node>q;
q.push(node(sta[0],sta[1],val+rooms[sta[0]][sta[1]]));
int m=(int)rooms.size();
int n=(int)rooms[0].size();
vector<vector<bool> >vis;vis.assign(rooms.size(),vector<bool>(rooms[0].size(),false));
vis[sta[0]][sta[1]]=true;
while(!q.empty()){
//pair<pair<int,int>,int>u=q.front();q.pop();
node u=q.front();q.pop();
if(u.z<=0)continue;
if(u.x==end2[0]&&u.y==end2[1]){
return true;
}
for(int i=0;i<4;i++){
int xx=u.x+fx[i][0];
int yy=u.y+fx[i][1];
if(!(xx>=0&&xx<m&&yy>=0&&yy<n))continue;
if(vis[xx][yy])continue;
if(u.z+rooms[xx][yy]<=0)continue;
vis[xx][yy]=true;
q.push(node(xx,yy,u.z+rooms[xx][yy]));
}
}
return false;
}
int minimumInitHealth(vector<vector<int> >& rooms, vector<int>& startPoint, vector<int>& endPoint) {
// write code here
int l=1;
int r=0x3f3f3f3f;
int ans=0;
while(l<r){
int mid=(l+r)>>1;
if(solve22(mid,rooms,startPoint,endPoint)){
ans=mid;
r=mid;
}
else l=mid+1;
}
return ans;
//return 0;
}
int main(){
vector<vector<int> >v;
int temp;
v.assign(3,vector<int>(3,0));
for(int i=0;i<1;i++){
for(int j=0;j<3;j++){
cin>>temp;
v[i][j]=temp;
}
}
vector<int>pp{0,0};
vector<int>p2{0,0};
cout<<minimumInitHealth(v,pp,p2);
system("pause");
return 0;
}

查看7道真题和解析