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的.....

Posted by 20101421 at 2012-04-08 11:16:51 on Problem 3083
原来注释过多会出现RE的.....一定要注意啊。。。呃,我也是右一个7K多的。。。。纯模拟每一步。


#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int x,y,x1,y1,x3,y3,x2,y2,l1,l2,l3;
int map[100][100];
int num1,num2;
struct B
{
    int x;
    int y;
    int pre;
}sq[10000];
int head,tail,p,q,k;
  int fx[4]={-1,1,0,0};
  int fy[4]={0,0,-1,1,};
int check(int i,int j)
{
    if(map[i][j]==0) return 1;
    return 0;
}

void dfs()
{  if(y1==y2&&x1==x2) return ;
  // if(l1==37) {printf(" %d %d ",y1,x1);scanf("%d",&x);}
  //scanf("%d",&x);
   if(num1==0)
   {
       if(check(y1+1,x1)==1)
         {   //printf("%d ",y1);scanf("%d",&x);
             y1=y1+1;x1=x1;
             num1=3;
             l1++;
             dfs();
         }
       else if(check(y1,x1-1)==1)
          {   y1=y1;x1=x1-1;
             num1=0;
             l1++;//printf("%d %d %d ",y1,x1,l1);
             dfs();
         }
          else if(check(y1-1,x1)==1)
          {  // scanf("%d",&x);
              y1=y1-1;x1=x1;
             num1=1;
             l1++; //printf("%d %d %d ",y1,num1,l1);
             dfs();
          }
           else if(check(y1,x1+1)==1)
          {   y1=y1;x1=x1+1;
             num1=2;
             l1++;
             dfs();
          }
   }
   else if(num1==1)
   {  
        if(check(y1,x1-1)==1)
         {   y1=y1;x1=x1-1;
             num1=0;
             l1++;
             dfs();
         }
       else if(check(y1-1,x1)==1)
          {  
            y1=y1-1;x1=x1;
             num1=1;
             l1++; //printf(" %d %d %d ",y1,x1,l1);
             dfs();
         }
          else if(check(y1,x1+1)==1)
          {   y1=y1;x1=x1+1;
             num1=2;
             l1++;//printf(" %d %d %d",y1,x1,l1);
             dfs();
          }
           else if(check(y1+1,x1)==1)
          {   y1=y1+1;x1=x1;
             num1=3;
             l1++;
             dfs();
          }
   }
      else if(num1==2)
   {
        if(check(y1-1,x1)==1)
         {  
             y1=y1-1;x1=x1;
             num1=1;
             l1++;
             dfs();
         }
       else if(check(y1,x1+1)==1)
          {   y1=y1;x1=x1+1;
             num1=2;
             l1++;//printf(" %d %d %d",y1,x1,l1);
             dfs();
         }
          else if(check(y1+1,x1)==1)
          {   y1=y1+1;x1=x1;
             num1=3;
             l1++;//printf(" %d %d %d",y1,x1,l1);
             dfs();
          }
           else if(check(y1,x1-1)==1)
          {   y1=y1;x1=x1-1;
             num1=0;
             l1++;
             dfs();
          }
   }
         else if(num1==3)
   {
        if(check(y1,x1+1)==1)
         {   y1=y1;x1=x1+1;
             num1=2;
             l1++;
             dfs();
         }
       else if(check(y1+1,x1)==1)
          {   y1=y1+1;x1=x1;
             num1=3;
             l1++;//printf("%d %d %d ",y1,x1,l1);
             dfs();
         }
          else if(check(y1,x1-1)==1)
          {   y1=y1;x1=x1-1;
             num1=0;
             l1++;
             dfs();
          }
           else if(check(y1-1,x1)==1)
          {   y1=y1-1;x1=x1;
             num1=1;
             l1++;//printf("%d %d %d ",y1,x1,l1);
             dfs();
          }
   }

   }

 void dfs2()
{  if(y3==y2&&x3==x2) return ;
   if(num2==0)
   {
       if(check(y3+1,x3)==1)
         {   y3=y3+1;x3=x3;
             num2=3;
             l2++;
             dfs2();
         }
       else if(check(y3,x3+1)==1)
          {   y3=y3;x3=x3+1;
             num2=0;
             l2++;
             dfs2();
         }
          else if(check(y3-1,x3)==1)
          {   y3=y3-1;x3=x3;
             num2=1;
             l2++;
             dfs2();
          }
           else if(check(y3,x3-1)==1)
          {   y3=y3;x3=x3-1;
             num2=2;
             l2++;
             dfs2();
          }
   }
   else  if(num2==1)
   {
       if(check(y3,x3+1)==1)
         {   y3=y3;x3=x3+1;
             num2=0;
             l2++;
             dfs2();
         }
       else if(check(y3-1,x3)==1)
          {   y3=y3-1;x3=x3;
             num2=1;
             l2++;
             dfs2();
         }
          else if(check(y3,x3-1)==1)
          {   y3=y3;x3=x3-1;
             num2=2;
             l2++;
             dfs2();
          }
           else if(check(y3+1,x3)==1)
          {   y3=y3+1;x3=x3;
             num2=3;
             l2++;
             dfs2();
          }
   }
         else  if(num2==2)
   {
       if(check(y3-1,x3)==1)
         {   y3=y3-1;x3=x3;
             num2=1;
             l2++;
             dfs2();
         }
       else if(check(y3,x3-1)==1)
          {   y3=y3;x3=x3-1;
             num2=2;
             l2++;
             dfs2();
         }
          else if(check(y3+1,x3)==1)
          {   y3=y3+1;x3=x3;
             num2=3;
             l2++;
             dfs2();
          }
           else if(check(y3,x3+1)==1)
          {   y3=y3;x3=x3+1;
             num2=0;
             l2++;
             dfs2();
          }
   }
   else  if(num2==3)
   {
       if(check(y3,x3-1)==1)
         {   y3=y3;x3=x3-1;
             num2=2;
             l2++;
             dfs2();
         }
       else if(check(y3+1,x3)==1)
          {   y3=y3+1;x3=x3;
             num2=3;
             l2++;
             dfs2();
         }
          else if(check(y3,x3+1)==1)
          {   y3=y3;x3=x3+1;
             num2=0;
             l2++;
             dfs2();
          }
           else if(check(y3-1,x3)==1)
          {   y3=y3-1;x3=x3;
             num2=1;
             l2++;
             dfs2();
          }
   }

   }
void  bfs()
   {
     head=0;
     tail=1;
     map[y][x]=1;
     sq[1].x=y;
     sq[1].y=x;
     sq[1].pre=0;
     while(head!=tail)
     {
       head++;
       for( k=0;k<4;k++)
        {p=sq[head].x+fx[k];
         q=sq[head].y+fy[k];
         if(check(p,q)==1)
         {
          tail=tail+1;
          sq[tail].x=p;
          sq[tail].y=q;
          sq[tail].pre=head;
          map[p][q]=1;
          if(sq[tail].x==y2&&sq[tail].y==x2)
          {  
              while(sq[tail].pre!=0)
              {
                  tail=sq[tail].pre;
                  l3++;
              }
              return ;
          }
         }
     }
   }
   }

int main()
{
    int k1,k2,k3,t,w,h,i,j;
    char Map[100][100];
    scanf("%d",&t);
    while(t--)
    { memset(map,-1,sizeof(map));
     memset(Map,0,sizeof(Map));
      memset(sq,0,sizeof(sq));
        scanf("%d %d",&w,&h);
        for(i=1;i<=h;i++)
         {  getchar();
             for(j=1;j<=w;j++)
          {scanf("%c",&Map[i][j]);
           if(Map[i][j]=='#') map[i][j]=1;
           else if(Map[i][j]=='.') map[i][j]=0;
           else if(Map[i][j]=='S') {map[i][j]=0;y=i;x=j;}
           else if(Map[i][j]=='E') {map[i][j]=0;y2=i;x2=j;}
           }
         }
         
           y1=y;x1=x;l1=1;num1=0;
           
           dfs();
           y3=y;x3=x;l2=1;num2=0;
           dfs2();
           l3=1;
            bfs();
      printf("%d %d %d\n",l1,l2,l3);
    }
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