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