ZOJ1011

匿名 (未验证) 提交于 2019-12-03 00:36:02
#include <stdio.h> #include <stdlib.h> #include <memory.h> #include <string.h>  int n, m, k, lev;//树的层数   int transition[155][155];//存放表格中数据   char tree[11][2222];      int dfs(int signal, int flag, int level)//flag为树中字母下标,至于下面为什么是2*flag和2*flag+2,因为字母间都有一个空格   {       if(level == lev + 1)       {           if(signal >= n - m)               return 1;           else               return 0;       }       if(tree[level][flag] == '*')       {           if(signal >= n - m)               return 1;           else               return 0;       }       int j, jj;       for(j = 0; transition[signal * k + tree[level][flag] - 'a'][j] < 15; j++);//把transition数组所有元素初始大值,假如为transition[4][1](即表中(1,b)数据),那此时j=4       for(jj = 0; jj < j; jj += 2)       {           if(dfs(transition[signal * k + tree[level][flag] - 'a'][jj], 2 * flag, level + 1) && dfs(transition[signal * k + tree[level][flag] - 'a'][jj + 1], 2 * flag + 2, level + 1))               return 1;       }       return 0;   }      int main(void)   {       int i, j, cnt, cas = 0;       char nk[155][155];       while(scanf("%d%d%d", &n, &m, &k), n)       {           if(cas)               printf("\n");           printf("NTA%d:\n", ++cas);           memset(transition, 1, sizeof transition);//初始大值           memset(nk, 0, sizeof nk);           memset(tree, 0, sizeof tree);           getchar();           for(i = 0; i < n * k; i++)           {               gets(nk[i]);               cnt = 0;               for(j = 0; j < strlen(nk[i]); j++)               {                   if(nk[i][j] >= '0' && nk[i][j] < n + '0')//把所有数字存放到transition数组中                       transition[i][cnt++] = nk[i][j] - '0';               }           }           while(scanf("%d", &lev) && lev != -1)           {               getchar();               for(i = 0; i <= lev; i++)                   gets(tree[i]);               if(dfs(0, 0, 0))                   printf("Valid\n");               else                   printf("Invalid\n");           }       }   }  

转载请标明出处:ZOJ1011
文章来源: ZOJ1011
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!