ম্যাটল্যাব, 316 305 300 293 বাইট
function P=f(a,b);z(a,b)=0;P=z;c=@(X)conv2(+X,[0,1,0;1,1,1;0,1,0],'s');B=1;while B;P=z;P(1)=1;for K=1:a*b;S=z;S(a,b)=1;for L=2:a*b;S(~S&c(S)&~P)=L;end;[i,j]=find(S&c(P==K));if i;r=randi(nnz(i));else;break;end;P(i(r),j(r))=K+1;if P(a,b);break;end;end;B=any(any(c(P>0)>3));end;P(P>0)=35;P=[P,'']
ধন্যবাদ @ লুইস মেন্ডো বিভিন্ন পরামর্শ এবং একগুচ্ছ বাইটের জন্য =)
এটি অনলাইন চেষ্টা করুন! (ওয়্যারেন্টি ব্যতীত: নোট করুন যে এটি অ্যাক্টেভে চালানোর জন্য কয়েকটি সামঞ্জস্য প্রয়োজন: প্রথমত আমাকে function
কীওয়ার্ডটি মুছে ফেলা এবং মানগুলি হার্ডকোড করা দরকার ছিল , দ্বিতীয়ত: স্প্ল্যাশগুলি মতলবের মতো সঠিকভাবে মুদ্রিত হয় না Also এছাড়াও আমিও করি নি অক্টাভের কনভ্যুশনাল কমান্ডগুলি পরীক্ষা করুন, যা ভিন্নভাবে কাজ করতে পারে))
ইনপুট জন্য উদাহরণ আউটপুট (7,10)
(ইতিমধ্যে বেশ কিছু সময় নিতে পারে):
#
#
##
##
# ###
# # ##
##### #
ব্যাখ্যা
এটি পছন্দসই 4-সংযোগের সাথে উপরের বাম থেকে নীচে ডানদিকে ক্রমান্বয়ে পাথ তৈরি করে এবং তারপরে আপনার অ্যাডজেন্ট অংশগুলি থাকতে পারে না এমন মানদণ্ড লঙ্ঘনকারী পাথগুলি প্রত্যাখ্যান করতে প্রত্যাখ্যানের নমুনা ব্যবহার করে।
function P=f(a,b);
z(a,b)=0; % a matrix of zeros of the size of th efield
P=z;
c=@(X)conv2(+X,[0,1,0;1,1,1;0,1,0],'s'); % our convolution function, we always convolute with the same 4-neighbourhood kernel
B=1;
while B; % while we reject, we generate paths:
P=z;
P(1)=1; % P is our path, we place the first seed
for K=1:a*b; % in this loop we generate the all shortest paths (flood fill) from the bottom right, withot crossing the path to see what fiels are reachable from the bottom left
S=z;
S(a,b)=1; % seed on the bottom left
for L=2:a*b;
S(~S&c(S)&~P)=L; % update flood front
end;
[i,j]=find(S&c(P==K)); % find a neighbour of the current end of the path, that is also reachable from the bottom left
if i; % if we found some choose a random one
r=randi(nnz(i));
else;
break; % otherwise restart (might not be necessary, but I'm too tired to think about it properly=)
end;
P(i(r),j(r))=K+1; % update the end of the current path
if P(a,b); % if we finished, stop continuing this path
break;
end;
end;
B=any(any(c(P>0)>3)); % check if we actually have a valid path
end;
P(P>0)=35; % format the path nicely
P=[P,''];
ওহ এবং সর্বদা হিসাবে:
সংকল্প সাফল্যের মূল চাবিকাঠি।