সি + পিকোস্যাট , 2345 995 952 বাইট
#include<picosat.h>
#define f(i,a)for(i=a;i;i--)
#define g(a)picosat_add(E,a)
#define b calloc(z+1,sizeof z)
#define e(a,q)if(a)A[q]^A[p]?l[q]++||(j[++k]=q):s[q]||(i[q]=p,u(q));
z,F,v,k,n,h,p,q,r,C,*x,*A,*i,*l,*s,*j,*m;u(p){s[m[++n]=p]=1;e(p%F-1,p-1)e(p%F,p+1)e(p>F,p-F)e(p<=F*v-F,p+F)}t(){f(q,k)l[j[q]]=0;f(q,n)s[m[q]]=0;k=n=0;i[p]=-1;u(p);}main(){void*E=picosat_init();if(scanf("%d,%d",&F,&v)-2)abort();z=F*v;for(x=b;scanf("%d,%d,%d",&r,&p,&q)==3;g(p),g(0))x[p=F-p+q*F]=r;f(p,F*v-F)if(p%F)g(p),g(p+1),g(p+F),g(p+F+1),g(0);for(A=b,i=b,l=b,s=b,j=b,m=b;!C;){picosat_sat(E,C=h=-1);f(p,F*v)A[p]=picosat_deref(E,p)>0,i[p]=0;f(p,F*v)if(x[p])if(i[q=p]){for(g(-q);i[q]+1;)q=i[q],g(-q);g(C=0);}else if(t(),r=n-x[p]){f(q,r<0?k:n)g(r<0?j[q]:-m[q]);g(C=0);}f(p,F*v)if(!i[p])if(t(),A[p]){g(-++z);f(q,k)g(j[q]);g(C=0);f(q,n)g(-m[q]),g(z),g(0);}else{C&=h++;f(q,k)g(-j[q]);g(++z);g(++z);g(0);f(q,F*v)g(s[q]-z),g(q),g(0);}}f(p,F*v)putchar(A[p]?35:46),p%F-1||puts("");}
এটি অনলাইন চেষ্টা করুন!
(সতর্কতা: এই টিআইও লিঙ্কটি একটি 30 কিলোবাইট ইউআরএল যা পিকোস্যাট 965 এর একটি সংযুক্ত কপি রয়েছে, তাই আপনি এটি কয়েকটি ব্রাউজারে লোড করতে সক্ষম নাও হতে পারেন তবে এটি কমপক্ষে ফায়ারফক্স এবং ক্রোমে লোড হয়))
কিভাবে এটা কাজ করে
আমরা প্রতিটি ঘরের (স্থল বা জল) ভেরিয়েবলের সাথে স্যাট সলভারটি আরম্ভ করি এবং কেবল নিম্নলিখিত সীমাবদ্ধতাগুলি:
- প্রতিটি সংখ্যাযুক্ত ঘরটি জমি।
- প্রতি 2 × 2 আয়তক্ষেত্রে কমপক্ষে একটি জমি থাকে।
বাকি সীমাবদ্ধতাগুলি সরাসরি SAT- এ এনকোড করা শক্ত, সুতরাং পরিবর্তে আমরা একটি মডেল পেতে সলভারটি চালাই, এই মডেলের সংযুক্ত অঞ্চলগুলি অনুসন্ধানের জন্য গভীরতা-প্রথম অনুসন্ধানগুলির ক্রম চালাই এবং নীচে অতিরিক্ত বাধা যুক্ত করুন:
- খুব বড় স্থল অঞ্চলে প্রতিটি সংখ্যাযুক্ত কক্ষের জন্য, একটি সীমাবদ্ধতা যুক্ত করুন যে সেই অঞ্চলে বর্তমান স্থল কোষগুলির মধ্যে কমপক্ষে একটি জল কোষ থাকা উচিত।
- খুব সামান্য একটি স্থল অঞ্চলে প্রতিটি সংখ্যাযুক্ত কক্ষের জন্য, একটি সীমাবদ্ধতা যুক্ত করুন যে সেই অঞ্চলের সীমান্তবর্তী বর্তমান জলের কোষগুলির মধ্যে কমপক্ষে একটি ল্যান্ড সেল থাকতে হবে।
- একই স্থল অঞ্চলে অন্য সংখ্যাযুক্ত কক্ষের মতো প্রতিটি সংখ্যাযুক্ত কক্ষের জন্য একটি সীমাবদ্ধতা যুক্ত করুন যে তাদের মধ্যে বর্তমান স্থল কোষগুলির পথের সাথে কমপক্ষে একটি জলের ঘর থাকতে হবে (প্রথম পৃষ্ঠার গভীরতা-প্রথম অনুসন্ধান থেকে মূল পয়েন্টগুলি হাঁটার মাধ্যমে পাওয়া যাবে) )।
- কোনও জমিযুক্ত কক্ষ সহ প্রতিটি ভূমি অঞ্চলের জন্য, সেগুলির মধ্যে বাধা যুক্ত করুন
- এই সমস্ত বর্তমান স্থল কোষগুলি জল হওয়া উচিত, বা
- এই অঞ্চলের সীমান্তবর্তী কমপক্ষে বর্তমান জলের কোষগুলির মধ্যে একটি স্থলভূমি হওয়া উচিত।
- প্রতিটি জলের অঞ্চলের জন্য, সীমাবদ্ধতাগুলি যুক্ত করুন either
- বর্তমানের সমস্ত জলের কোষগুলি জমি বা, হওয়া উচিত
- বর্তমানের জলের কোষগুলি ব্যতীত প্রতিটি কোষের স্থল হওয়া উচিত, বা
- এই অঞ্চলের সীমানা ঘেঁষে কমপক্ষে একটি বর্তমান ভূমি কোষের জল হওয়া উচিত।
পিকোস্যাট লাইব্রেরিতে ইনক্রিমেন্টাল ইন্টারফেসের সুবিধা গ্রহণ করে আমরা তাত্ক্ষণিকভাবে সলভার দ্বারা তৈরি পূর্ববর্তী সমস্ত সূত্রগুলি সংরক্ষণ করে যুক্ত সীমাবদ্ধতাগুলি সহ সলভারটিকে পুনরায় চালু করতে পারি। পিকোস্যাট আমাদের একটি নতুন মডেল দেয় এবং সমাধানটি বৈধ না হওয়া পর্যন্ত আমরা উপরের পদক্ষেপগুলি পুনরাবৃত্তি করতে থাকি।
এটি লক্ষণীয়ভাবে কার্যকর; এটি 15 × 15 এবং 20 × 20 টি সেকেন্ডের ক্ষুদ্র ভগ্নাংশে সমাধান করে।
( কিছুক্ষণ আগে, ইনক্রিমেন্টাল এসএটি সলভারে সংযুক্ত অঞ্চলগুলিকে ইন্টারেক্টিভভাবে সীমাবদ্ধ করার এই ধারণাটি দেওয়ার জন্য লোপসিকে ধন্যবাদ জানাই ))
15 × 15 হার্ড ধাঁধা ( 5057541 , 5122197 , 5383030 , 6275294 , 6646970 , 6944232 ) এর এলোমেলো পৃষ্ঠা :
15,15 1,5,1 3,9,1 5,4,2 1,6,2 2,11,2 2,2,3 3,9,3 2,4,4 1,10,4 5,12,4 3,1,5 1,3,5 3,8,5 1,13,5 5,5,6 1,12,6 1,2,8 2,9,8 1,1,9 2,6,9 6,11,9 3,13,9 5,2,10 2,4,10 4,10,10 1,5,11 2,12,11 2,3,12 2,8,12 5,10,12 1,5,13 1,9,13 1,6,14 1,8,14
15,15 4,2,0 2,5,0 1,3,1 2,14,2 1,3,3 2,11,3 1,13,3 1,5,4 11,7,4 1,9,4 1,4,5 1,8,5 2,10,5 12,14,5 3,5,6 1,4,7 2,10,7 3,9,8 4,0,9 1,4,9 1,6,9 3,10,9 1,5,10 1,7,10 8,9,10 1,1,11 10,3,11 2,11,11 6,0,12 1,11,13 2,9,14 1,12,14
15,15 2,2,0 8,10,0 2,3,1 2,14,2 2,3,3 3,5,3 3,9,3 2,11,3 5,13,3 6,0,4 3,7,4 3,3,5 2,11,5 2,6,6 1,8,6 1,4,7 2,10,7 1,6,8 2,8,8 5,3,9 2,11,9 2,7,10 7,14,10 2,1,11 4,3,11 2,5,11 1,9,11 2,11,11 2,0,12 4,6,13 1,11,13 3,4,14 1,12,14
15,15 2,0,0 2,4,0 3,6,1 2,10,1 1,13,1 2,5,2 2,12,2 3,0,3 2,2,3 4,7,3 2,9,3 1,14,3 1,4,4 1,8,4 2,12,5 4,2,6 3,4,6 1,14,6 7,7,7 1,10,8 2,12,8 3,2,9 2,14,9 2,0,10 2,6,10 1,10,10 2,5,11 4,7,11 2,12,11 1,14,11 3,2,12 3,9,12 1,1,13 2,4,13 3,8,13 2,10,14 5,14,14
15,15 1,3,0 1,14,0 3,7,1 3,10,1 2,13,1 3,1,2 4,5,2 2,12,3 3,3,4 1,8,4 1,1,5 3,5,5 1,9,5 5,13,5 3,3,6 1,8,6 2,2,7 2,12,7 1,6,8 1,8,8 2,11,8 2,1,9 4,5,9 2,9,9 2,13,9 2,6,10 4,11,10 1,2,11 3,9,12 2,13,12 3,1,13 2,4,13 3,7,13 1,0,14
15,15 2,8,0 2,4,1 2,7,1 1,10,1 6,4,3 1,1,4 12,5,4 3,11,4 5,13,4 3,10,5 3,0,6 1,6,6 2,8,6 4,13,7 2,3,8 1,6,8 3,8,8 2,14,8 2,4,9 5,1,10 4,3,10 1,9,10 6,13,10 3,8,11 1,10,11 3,4,13 2,7,13 3,10,13 1,6,14 1,14,14
20 × 20 সাধারণ ধাঁধাগুলির একটি এলোমেলো পৃষ্ঠা ( 536628 , 3757659 ):
20,20 1,0,0 3,2,0 2,6,0 1,13,0 3,9,1 3,15,1 2,7,2 3,13,2 3,0,3 2,3,3 3,18,3 3,5,4 2,9,4 2,11,4 2,16,4 1,0,5 2,7,5 1,10,5 1,19,5 3,2,6 1,11,6 2,17,6 2,0,7 3,4,7 5,6,7 2,9,7 4,13,7 3,15,7 1,3,8 1,10,8 1,14,9 2,18,9 3,1,10 2,4,10 1,8,10 1,10,10 3,12,10 3,16,10 1,9,11 1,17,11 2,19,11 2,0,12 2,2,12 1,4,12 4,6,12 2,13,12 2,15,12 1,14,13 2,17,13 1,3,14 2,5,14 4,7,14 2,15,14 3,0,15 1,2,15 2,13,15 3,18,15 3,7,16 7,10,16 1,17,16 2,0,17 2,3,17 2,5,17 3,11,17 3,15,17 1,0,19 1,2,19 1,4,19 2,6,19 5,8,19 1,11,19 1,13,19 3,15,19 2,18,19
20,20 1,0,0 1,4,0 5,8,0 1,17,0 1,19,0 2,17,2 3,6,3 2,10,3 2,12,3 4,14,3 6,0,4 3,4,4 4,7,4 1,11,4 1,18,4 1,6,5 3,12,5 4,15,5 4,4,6 2,16,6 2,19,6 6,0,7 3,10,7 2,12,8 2,17,8 3,3,9 2,5,9 4,8,9 2,10,9 3,0,10 1,2,10 5,14,10 2,16,10 2,19,10 7,7,11 3,12,12 2,17,12 2,2,13 4,4,13 3,6,13 4,14,13 3,0,14 1,3,14 1,5,14 3,16,14 1,2,15 1,9,15 2,11,15 5,13,15 3,19,15 1,4,16 3,6,16 1,3,17 1,12,17 1,14,17 1,16,17 6,0,19 2,2,19 3,5,19 2,7,19 5,9,19 1,11,19 2,13,19 1,15,19 4,17,19