Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
STL优先队列+BFS 为什么TLE呢不知道是不是STL慢?还是自己的代码有问题?还有什么地方应该优化呢 ,大家给看看吧。 //STL 优先队列 #include<iostream> #include<queue> using namespace std; struct point { int row; int col; int d; }start,end; struct cmp { bool operator()(const struct point &a,const struct point &b) { if(a.d>b.d) return 1; else return 0; } }; typedef priority_queue< struct point, vector<struct point>, cmp > qu; qu q; int row,col; char map[301][301]; int visit[301][301]; int dd[301][301]; int direct[][2]={{0,1},{1,0},{0,-1},{-1,0},}; int BFS(struct point start) { struct point temp; struct point newp; int ii,jj; int i; int noway=0; q.push(start); while(q.size()) { temp=q.top(); visit[temp.row][temp.col]=1; q.pop(); if(map[temp.row][temp.col]=='T') { cout<<temp.d<<endl; noway=1; break; } for(i=0;i<4;i++) { ii=temp.row+direct[i][0]; jj=temp.col+direct[i][1]; if(ii>=0&&jj>=0&&ii<row&&jj<col&&!visit[ii][jj]&&map[ii][jj]!='R'&&map[ii][jj]!='S') { if(map[ii][jj]=='B') newp.d=temp.d+2; else newp.d=temp.d+1; if(newp.d>dd[ii][jj])continue; else dd[ii][jj]=newp.d; newp.row=ii; newp.col=jj; q.push(newp); } } } if(!noway)cout<<"-1"<<endl; return 0; } int Init() { int i,j; for(i=0;i<301;i++) { for(j=0;j<301;j++) { visit[i][j]=0; dd[i][j]=0xffffff; } } return 0; } int main() { int i,j; while(cin>>row>>col) { if(row==0&&col==0)break; Init(); for(i=0;i<row;i++) cin>>map[i]; for(i=0;i<row;i++) { for(j=0;j<col;j++) { if(map[i][j]=='Y') { start.row=i; start.col=j; start.d=0; BFS(start); } } } } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator