24h購物| | PChome| 登入
2009-10-02 22:37:57| 人氣901| 回應0 | 上一篇 | 下一篇

板橋高中98-2模擬測驗 A-排列組合

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

作法 : DFS

生出所有組合,在途中可以事先檢查

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

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int num[256]={0},way[256],time=0;
int map[256][256]={0},top[256]={0},appear[256]={0};
void make (int k,int end)
{
  int a,b,c;
  if(time>=10) return;
  if(k>=end)
     {
       time++;
       for(a=0;a<end;a++)
          printf("%c",way[a]);
          printf("\n");
       return ;
     }
  for(a='a';a<='z';a++)
     if(num[a]>0)
        {
          int find=0;
            for(b=0;b<top[a];b++)
               for(c=0;c<k;c++)
                  if(way[c]==map[a][b]) {find=1;return;}
          if(find==0)
            {
              num[a]--;
              way[k]=a;
              make(k+1,end);
              num[a]++;
            }
        }
}
main()
{
   int t,n,m,a,b,c;
   scanf("%d",&t);
   while(t--)
      {
         char s[11],sto[2],sfrom[2];
         scanf("%s",s);
         m=strlen(s);
         for(a='a';a<='z';a++)
           { num[a]=0;top[a]=0;appear[a]=0;}
         for(a=0;a<m;a++)    num[s[a]]++;
        
         scanf("%d",&n);
         while(n--)
            {
               scanf("%s %s",sto,sfrom);
               map[sto[0]][top[sto[0]]]=sfrom[0];
               top[sto[0]]++;
            }
         time=0;
         make(0,m);
         if(time==0) printf("NANJ你唬我\n");
      }
   return 0;
}

台長: 來源不明
人氣(901) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: 資訊競賽 |
此分類下一篇:板橋高中98-2模擬測驗 B-成績單
此分類上一篇:板橋高中98資訊能力競賽 最短距離

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