中兴捧月 俄罗斯套娃奖品

来源:互联网 发布:java ftp excel 编辑:程序博客网 时间:2024/04/29 18:39

#include <stdio.h>

#define  FALSE0   //用来标记有未被访问过 
#define  TRUE 

#define R 
#define C  5

#define flag1 -10

#define  Max_Size 100

#define MAX(x,y) ((x) > (y) ? (x) :(y)) 

int visited[Max_Size][Max_Size] ;

 
int A[R][C]   1,  16,  15,  14,   13,
       2,  17,  24,  23,   12,
     3,  18,  25,  22,   11,
     4,  19,  20,  21,   10,
       5,   6,   7,   8,    9

    


;
 

 

intflag[R][7*C]        



int fun(int i,int j)
{

 

 if(i<0 || j<0 ||i>=R || j>=C){
  return0 ;
 }

 if(visited[i][j]){
  return0 ;
 }

 visited[i][j] = TRUE ;


 if((flag[i][7*j+1])== -1&& (flag[i][7*j+2])==-1&& (flag[i][7*j+3])==-1&& (flag[i][7*j+4])==-1){
  visited[i][j] =FALSE ;
  returnA[i][j] ;
 }

 else{

  int sum1 =0 ;
  int sum2 =0 ;
  int sum3 =0 ;
  int sum4 =0 ;
  if(flag[i][7*j+1]!=-1){
   sum1 =fun(i-1,j) ;
  }
  
  if(flag[i][7*j+2]!=-1){
   sum2 =fun(i,j-1) ;
  }

  if(flag[i][7*j+3]!=-1){
   sum3 =fun(i+1,j) ;
  }

  if(flag[i][7*j+4]!=-1){
   sum4 =fun(i,j+1) ;
  }

 int a =MAX(sum1,sum2) ;
 int b = MAX(sum3,sum4) ;
 
 a = MAX(a,b) ;
 if(a == sum1 &&a>0){
  flag[i][7*j+5] =i-1 ;
  flag[i][7*j+6] =j  ;
 }
 if(a == sum2 &&a>0){
  flag[i][7*j+5] =i  ;
  flag[i][7*j+6] =j-1 ;
 
 }
 if(a == sum3 &&a>0){
  flag[i][7*j+5] =i+1 ;
  flag[i][7*j+6] =j  ;
 }
 if(a == sum4 &&a>0){
  flag[i][7*j+5] =i  ;
  flag[i][7*j+6] =j+1 ;
 }

  a = a +A[i][j] ;
 
 
 visited[i][j] = FALSE ;
  return a ;

 }


}

void initm()
{
 int i ;
 int ;
 for(i=0 ; i<R ;i++){
  for(j=0 ; j<C ;j++){     //A[i][j]=>flag[i][6*j] 
   flag[i][7*j]= A[i][j] ;
   flag[i][7*j+5]= flag1 //标志flag1
   flag[i][7*j+6]= flag1 //标志flag1 , 指向下一个节点

   if(i-1>=0&& A[i-1][j] >A[i][j]){
    flag[i][7*j+1]= A[i-1][j] ;
   }
   if(i+1<R&& A[i+1][j] >A[i][j]){
    flag[i][7*j+3]= A[i+1][j] ;
   }
   if(j-1>=0&& A[i][j-1] >A[i][j]){
    flag[i][7*j+2]= A[i][j-1] ;
   }
   if(j+1<C&& A[i][j+1] >A[i][j]){
    flag[i][7*j+4]= A[i][j+1] ;
   }
  }
 }
}

void init()
{
 int i,j ;
 for(i=0 ; i<R;i++){
  for(j=0;j<7*C;j++){
   flag[i][j] =-1 ;
  }
 }
}

void printfnode(int i,int j)
{
 printf("(%d,%d) ",i,j) ;
 int a = flag[i][7*j+5] ;
 int b = flag[i][7*j+6] ;
 if(a!=flag1 &&b!=flag1){
  printfnode(a,b) ;
 }
}

void printfvalue(int i,int j)
{
 printf("%d ",A[i][j]) ;
 int a = flag[i][7*j+5] ;
 int b = flag[i][7*j+6] ;
 if(a!=flag1 &&b!=flag1){
  printfvalue(a,b) ;
 }
}



void main()
{
 
 int i ;
 int ;
 int k ;

 init() ;
 
 initm() ;


 
 printf("\n\n\n") ;


 int sum = fun(0,0) ;

 printf("%d\n",sum) ;

// printfnode(0,0) ;
 printfvalue(0,0) ;
 printf("\n") ;

0 0
原创粉丝点击