首页 > 虾皮第二题.机器人那道题
头像
牛客9622947号
编辑于 2021-07-05 18:06
+ 关注

虾皮第二题.机器人那道题

求大佬帮忙,我已经搞吐了,在本地用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;
    } 


全部评论

(4) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

热门推荐