UVa10001伊旬园

来源:互联网 发布:定增pe天使投资知乎 编辑:程序博客网 时间:2024/06/07 01:17

就是题目特别难懂

#include<stdio.h>#include<string.h>int left[8] = {0,0,0,0,1,1,1,1};int cell[8] = {0,0,1,1,0,0,1,1};int right[8] = {0,1,0,1,0,1,0,1};int newc[8];int autom;int len;char cnum[50];int target[50];int ans[50];bool dfs(int cur){if(cur == len-2){bool a = false,b = false;for(int i=0; i < 8; ++i){if(!a){a = left[i] == ans[cur-1] &&\cell[i] == ans[cur] &&\right[i] == ans[cur+1] &&\newc[i] == target[cur];}if(!b){b = left[i] == ans[cur] &&\cell[i] == ans[cur+1] &&\right[i] == ans[0] &&\newc[i] == target[cur+1];}}return a&&b;}for(int i=0; i < 8; ++i){if(left[i] == ans[cur-1] &&\cell[i] == ans[cur] &&\newc[i] == target[cur]){ans[cur+1] = right[i];if(dfs(cur+1))return true;}}return false;}int main(){//freopen("input.txt","r",stdin);//freopen("out.txt","w",stdout);while(scanf("%d %d %s", &autom, &len, cnum) == 3){for(int i=0; i < len; ++i){target[i] = cnum[i]-'0';}memset(newc, 0, sizeof(newc));int w=0;while(autom){newc[w++] = autom%2;autom /= 2;}bool ok = false;for(int i=0; i < 8; ++i){if(target[0] == newc[i]){memset(ans, 0, sizeof(ans));ans[len-1] = left[i];ans[0] = cell[i];ans[1] = right[i];ok = dfs(1);if(ok)break;}}if(ok)printf("REACHABLE\n");elseprintf("GARDEN OF EDEN\n");}}


原创粉丝点击