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

谁能帮我看看为什么WA?交了很多遍了一直这样

Posted by JUSTACCEPTED at 2007-05-24 22:14:55 on Problem 2312
#include<stdio.h>
#define INF 1<<20  

#define Enqueue( r , c ) q[front][0] = r , q[front][1] = c , front++ 
#define Dequeue( r , c ) r = q[rear][0] , c = q[rear][1] , rear++ 

int map[512][512] ;
int flag[512][512] ;
int R , C ;
int dr[] = { -1 , 0 , 1 , 0 } ;
int dc[] = { 0 , 1 , 0 , -1 } ;
int q[512 *512][2] ;

void BFS( int r , int c )
{
	int rr , cc , i , front , rear  ;

	front = rear = 0 ;
	Enqueue( r , c ) ;
	while( rear < front)
	{
		Dequeue( r , c ) ;
		for( i = 0 ; i <= 3 ; i++ )
		{
			rr = r + dr[i] ;
			cc = c + dc[i] ;
			if( rr >= 0 && rr < R && cc >= 0 && cc < C &&  map[rr][cc] + flag[r][c] < flag[rr][cc] )
			{
				flag[rr][cc] = map[rr][cc] + flag[r][c] ;
				Enqueue( rr , cc ) ;
			
			}
		}	
	}	
}
int main()
{
	int i , k , tr , tc , sr , sc ;
	char s[512] ;

	while( 1 )
	{
		scanf("%d%d" , &R , &C ) ;
		if( R == 0 && C == 0 )
		{
			return 0 ;
		}
		for( i = 0 ; i < R ; i++ )
		{
			scanf("%s" , s ) ;
			for( k = 0 ; k < C ; k++ )
			{
				flag[i][k] = INF ;
				if( s[k] == 'Y' )
				{
					sr = i ;
					sc = k ;
					flag[i][k] = 0 ;
				}
				else if( s[k] == 'T' )
				{
					map[i][k] = 1 ;
					tr = i ;
					tc = k ;
				}
				else if( s[k] == 'B' )
				{
					map[i][k] = 2 ;
				}
				else if( s[k] == 'E')
				{
					map[i][k] = 1 ;
				}
				else 
				{
					map[i][k] = INF ;	
				}
			}
		}
		BFS( sr , sc ) ;
		printf("%d\n" , flag[tr][tc] ) ;
	}
	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