Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

没有往回走,有大神知道为什么会超时吗!!!

Posted by wangmeimei at 2020-03-26 21:19:21 on Problem 3669
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
int dx[]={0, 0, 0, 1, -1}, dy[]={0, 1, -1, 0 , 0}; //计算流星和附近四个点的偏移 
int map[400][400];
int n; //流星的数量 
struct node{
	int x, y, t;
};
int bfs(){
	if(map[0][0]==0)return -1;
	if(map[0][0]==-1)return 0;
	queue<node>q;
	q.push(node{0,0,0});
	while(!q.empty()){
		//cout<<'+';
		node cur=q.front();
		q.pop();
		int x=cur.x, y=cur.y, t=cur.t;
		cout<<"---------------"<<x<<y<<t<<endl;
		if(map[x][y]==-1)return t;
		int cx, cy;
		for(int i=1;i<=4;i++){
			cx=x+dx[i];
			cy=y+dy[i];
			if(cx>=0&&cy>=0&&(t+1<map[cx][cy]||map[cx][cy]==-1)){
				if(map[cx][cy]!=-1)map[cx][cy]=t+1;
				q.push(node{cx, cy, t+1});
				cout<<'+'<<cx<<cy<<t+1<<map[cx][cy]<<endl;
				
			}
		}
	}
	return -1;
	
}

int bfs1(){
	if(map[0][0]==0)return -1;
	if(map[0][0]==-1)return 0;
	node temp, now;
	queue<node>que;
	que.push(temp);
	while(!que.empty()){
		now=que.front();
		que.pop();		
		for(int j=1;j<=4;j++){
			temp.x=now.x+dx[j];
			temp.y=now.y+dy[j];
			temp.t=now.t+1;
			if (temp.x>=0&&temp.x<=400&&temp.y>=0&&temp.y<=400){
				if(map[temp.x][temp.y]==-1) return temp.t;
				if(map[temp.x][temp.y]>temp.t) {
					map[temp.x][temp.y]=temp.t;
					que.push(temp);
				}
			}

		}
	}	
	return -1;
}
int main(){
	int meteor_x, meteor_y, t; 
	memset(map, -1, sizeof(map));  //把坐标系的点初始化-1, 表示没有损坏 
	cin>>n; //流星的数目
	for(int i=1;i<=n;i++){	//遍历每颗流星 
		cin>>meteor_x>>meteor_y>>t;		//遍历每颗流星和他上下左右四个点 
		for(int j=0;j<5;j++){
			int destroy_x = meteor_x + dx[j];
			int destroy_y = meteor_y + dy[j];
			if(destroy_x>=0&&destroy_x<=400&&destroy_y>=0&&destroy_y<=400&&(map[destroy_x][destroy_y]>t||map[destroy_x][destroy_y]==-1))
				map[destroy_x][destroy_y]=t;			
		}		
	} 
	cout<<bfs()<<endl;	
	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator