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

Re:那位大牛看看我的为什么WA?

Posted by acmzhy at 2012-05-08 15:54:19 on Problem 1324
In Reply To:那位大牛看看我的为什么WA? Posted by:acmzhy at 2012-05-08 15:54:10
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <stack>
using namespace std;
int step[25][25];
bool flag[25][25];
int dir[4][2]={1,0,-1,0,0,1,0,-1};
struct ln{
	int x;
	int y;	
};
stack<ln>stk;
queue<ln>q;
int n,m,l,k;
void UFset(){
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++){
			step[i][j]=-1;
			flag[i][j]=1;
		}
}
void bfs(){
	ln a;
	int headx,heady,nowx,nowy,nexx,nexy;
	while(!q.empty()){
		headx=q.front().x;
		heady=q.front().y;
		q.pop();
		bool find=0;
		for(int i=0;i<4;i++){
			nexx=headx+dir[i][0];
			nexy=heady+dir[i][1];
			if(flag[nexx][nexy]==0 || step[nexx][nexy]!=-1 || nexx<0 || nexx>n || nexy<1 || nexy>m)
				continue;
			else{
				find=1;
				a.x=nexx;
				a.y=nexy;
				step[nexx][nexy]=step[headx][heady]+1;
				q.push(a);
			}
		}
		if(find&&!stk.empty()){
			nowx=stk.top().x;
			nowy=stk.top().y;
			flag[nowx][nowy]=1;
			stk.pop();	
		}
		if(step[1][1]!=-1)
			return ;
	}
	return ;
}
int main(){
	int tet=1;
	ln b;
	int x,y;
	while(cin>>n>>m>>l){
		if(n==0&&m==0&&l==0)
			break;
		UFset();
		cin>>x>>y;
		b.x=x;
		b.y=y;
		q.push(b);
		step[x][y]=0;
		flag[x][y]=0;
		for(int i=1;i<l;i++){
			cin>>x>>y;
			b.x=x;
			b.y=y;
			flag[x][y]=0;
			stk.push(b);
		}
		cin>>k;
		while(k--){
			cin>>x>>y;
			step[x][y]=-2;
			flag[x][y]=0;
		}
		bfs();
		printf("Case %d: %d\n",tet++,step[1][1]);
		while(!stk.empty()){
			stk.pop();	
		}
		while(!q.empty()){
			q.pop();	
		}
	}
	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