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 |
Why TLE Can anyone help?~#include<iostream> #include<cmath> #include<queue> #define MAX 200 #define INT_MAX 1<<20 using namespace std; struct Point { int x,y; int level; }; int m,n,t; char input[MAX][MAX]; int move[4][2]={0,1,0,-1,1,0,-1,0}; int dist(Point u,Point v) { int i,j; bool visit[MAX][MAX]; for(i=0;i<=m+1;i++) { for(j=0;j<=n+1;j++) { visit[i][j]=false; } } Point now,tmp; u.level=0; queue<Point> Q; Q.push(u); visit[u.x][u.y]=true; while(!Q.empty()) { now=Q.front(); if(now.x==v.x&&now.y==v.y) { return now.level; } Q.pop(); for(i=0;i<4;i++) { tmp.x=now.x+move[i][0]; tmp.y=now.y+move[i][1]; tmp.level=now.level+1; if(!visit[tmp.x][tmp.y]&&input[tmp.x][tmp.y]!='#') { visit[tmp.x][tmp.y]=true; Q.push(tmp); } } } } int main() { int val[MAX][MAX]; bool visited[MAX]; Point p[MAX]; int lowcost[MAX]; int min; int sum; int closest; int i,j; cin>>t; while(t--) { sum=0; cin>>n>>m; cin.get(); int location=2; for(i=0;i<=m+1;i++) { input[i][0]='#'; input[i][n+1]='#'; } for(i=0;i<=n+1;i++) { input[0][i]='#'; input[m+1][i]='#'; } for(i=1;i<=m;i++) { for(j=1;j<=n;j++) { input[i][j]=cin.get(); if(input[i][j]=='S') { p[1].x=i; p[1].y=j; } } cin.get(); } /*for(i=0;i<=m+1;i++) { for(j=0;j<=n+1;j++) { cout<<input[i][j]; } cout<<endl; }*/ for(i=1;i<=m;i++) { for(j=1;j<=n;j++) { if(input[i][j]=='A') { p[location].x=i; p[location++].y=j; } } } for(i=1;i<location;i++) { visited[i]=false; } for(i=1;i<location;i++) { for(j=i;j<location;j++) { val[i][j]=dist(p[i],p[j]); val[j][i]=val[i][j]; } } for(i=1;i<location;i++) { for(j=1;j<location;j++) { cout<<val[i][j]<<" "; } cout<<endl; } visited[1]=true; for(i=1;i<location;i++) { lowcost[i]=val[i][1]; } for(i=1;i<location-1;i++) { min=INT_MAX; for(j=1;j<location;j++) { if(!visited[j]&&lowcost[j]<min) { min=lowcost[j]; closest=j; } } visited[closest]=true; sum+=min; for(j=1;j<location;j++) { if(!visited[j]&&lowcost[j]>val[closest][j]) { lowcost[j]=val[closest][j]; } } } cout<<sum<<endl; } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator