24h購物| | PChome| 登入
2009-06-01 07:05:30| 人氣810| 回應0 | 上一篇 | 下一篇

2007 NPSC H. 數字拼盤

推薦 0 收藏 0 轉貼0 訂閱站台

作法:DFS搜尋所有可能

想法:紀錄上一次的動作,以免走回去
8-PUZZLE問題

/**********************************************************/

#include<stdio.h>
#include<stdlib.h>
int map[7][7]={0};
int startx,starty,find;
void DFS(int nowx,int nowy,int time,int last)
{
  if(find==1||time>20) return; 
  int a,b,num=1,same=0;
  for(a=1;a<=3;a++)
   for(b=1;b<=3;b++,num++)
    if(map[a][b]==num) same++;
  if(same==8) {find=1;}
  /*last 1上 2 右 3 下 4 左 */
  a=nowx;b=nowy;
    if(map[a][b-1]!=-1&&last!=2)
      {
        /*printf("左\n"); */
        int temp=map[a][b],temp1=map[a][b-1];
        map[a][b]=temp1;
        map[a][b-1]=temp;
        DFS(a,b-1,time+1,4);
        map[a][b]=temp;
        map[a][b-1]=temp1;
      }
    if(map[a][b+1]!=-1&&last!=4)
      {
     /*  printf("右\n");  */
        int temp=map[a][b],temp1=map[a][b+1];
        map[a][b]=temp1;
        map[a][b+1]=temp;
        DFS(a,b+1,time+1,2);
        map[a][b]=temp;
        map[a][b+1]=temp1;
      }
    if(map[a-1][b]!=-1&&last!=1)
      {
      /*  printf("上\n");  */
        int temp=map[a][b],temp1=map[a-1][b];
        map[a][b]=temp1;
        map[a-1][b]=temp;
        DFS(a-1,b,time+1,3);
        map[a][b]=temp;
        map[a-1][b]=temp1;
      }
   if(map[a+1][b]!=-1&&last!=3)
      {
     /*   printf("下\n"); */
        int temp=map[a][b],temp1=map[a+1][b];
        map[a][b]=temp1;
        map[a+1][b]=temp;
        DFS(a+1,b,time+1,1);
        map[a][b]=temp;
        map[a+1][b]=temp1;
      }
}
main()
{
 int n,a,b,c;
 for(a=0;a<7;a++)
  for(b=0;b<7;b++)
   map[a][b]=-1;
 scanf("%d",&n);
 while(n--)
   {
     for(a=1;a<=3;a++)
      for(b=1;b<=3;b++)
       {
         scanf("%d",&map[a][b]);
         if(map[a][b]==0)
          {startx=a;starty=b;}
       }
      find=0;
      DFS(startx,starty,0,0);
      if(find==0) printf("Hard\n");
      else printf("Easy\n");
   }
 return 0;
}

台長: 來源不明
人氣(810) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: NPSC |
此分類下一篇:2006 NPSC E. 漢米頓的麻煩
此分類上一篇:2006 NPSC D. 水之都

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文