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

哪位高手帮俺看一下======一道难倒n人的小题,

Posted by qbc at 2006-07-18 21:53:00 on Problem 2882
此代码,运行样例正确,提交时老是timeerror
#include"iostream.h"

int dx[6]={1,-1,0, 0,0, 0};
int dy[6]={0, 0,1,-1,0, 0};
int dz[6]={0, 0,0, 0,1,-1};

short a[12][12][12]={0};//全局,注意赋值法,同时在其外多添上一层
typedef struct{        
	     short x;
         short y;
		 short z;
		}elemtype;

elemtype  Stack[1100] ;
   
int h,t,max,min;
int re(int p)
{
	if(p>max)
		p--;
	if(p<0)
		p++;
	return p;

}

int mgpath()           	
{   
	int find,top,di=0;;
   	int count=0;                  
	for(int i=0;max>=i;i++)
	for(int j=0;max>=j;j++)
	for(int k=0;max>=k;k++)
    if(a[i][j][k]==0)
  {  
		 top=0;
	Stack[top].x=i;Stack[top].y=j;Stack[top].z=k;
	a[i][j][k]=1;
	   while (top>-1)   	/*栈不空时循环,每次只处理一个点*/
      {       
      	  	find=0; /*找下一个可走方块*/
		    di=-1;

	        	while (di<6 && find==0)//di会接着上次加 
			{    
				di++;

	           switch(di)
	           {
	           case 0:i=i+1;break;
	           case 1:j=j+1;break;
	           case 2:k=k+1;break;
	           case 3:i=i-1;break;
			   case 4:j=j-1;break;
			   case 5:k=k-1;break;
			   }
	           if (a[i][j][k]==0&&max>=i&&i>=0&&max>=j&&j>=0&&max>=k&&k>=0)
				   find=1;
			   else
			   { switch(di)
	           {
	           case 0:i=i-1;break;
	           case 1:j=j-1;break;
	           case 2:k=k-1;break;
	           case 3:i=i+1;break;
			   case 4:j=j+1;break;
			   case 5:k=k+1;break;
			   }
			   }
			} 
			    
			if (find==1)  /*找到了下一个可走方块*/
			{   
			       top++;   /*下一个可走方块进栈*/
              Stack[top].x=i;Stack[top].y=j;Stack[top].z=k;
	           a[i][j][k]=1;	/*避免重复走到该方块*/
			}
	        else	   /*没有路径可走,则退栈*/
			{   
				a[Stack[top].x][Stack[top].y][Stack[top].z]=1;
                               top--;
			}
	  }
          
             count++;
  }
            return count;
         
}  

void main()
{
  


 int n,c,i,j,k,x,y,z,count,u=0;
    cin>>c;
	int cc=c;
	int b[20];
    while(cc>0)
	{
        
        max=0;
        min=200;
        cin>>n;
        t=0;
        for(count=1;count<=n;count++){
				cin>>x>>y>>z;
				a[x][y][z]=1;
				if(x>max) max=x;
				if(x<min) min=x;
				if(y>max) max=y;
				if(y<min) min=y;
				if(z>max) max=z;
				if(z<min) min=z;
				
                       
		}
        max++; min--;
                                   
        b[u++]=mgpath()-1;
         for(i=0;i<=max;i++){
            for(j=0;j<=max;j++){
                for(k=0;k<=max;k++){
                    a[i][j][k]=0;
				}
			}
     
   
		 }


     cc--;


	} 
for(u=0;u<c;u++)
cout<<b[u]<<endl;


}

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