ম্যাথমেটিকা: ট্রেন লাইব্রের্থ (827 টি অক্ষর)
মূলত, আমি path 1,1,1 from থেকে {5,5,5} পর্যন্ত একটি পথ তৈরি করেছি তবে কোনও ভুল ঘোরানো সম্ভব হয়নি বলে আমি কাঁটাচামচ বা "সিদ্ধান্ত পয়েন্টস" (ডিগ্রিটির শীর্ষাংশ> 2) চালু করেছি যেখানে কোনটি কোন পথে যেতে হবে তা সিদ্ধান্ত নিতে হবে। ফলাফলটি একটি সত্য গোলকধাঁধা বা গোলকধাঁধা।
"অন্ধ এলিগুলি" একটি সহজ, সরাসরি পথ খুঁজে পাওয়ার চেয়ে সমাধান করা অনেক বেশি চ্যালেঞ্জিং ছিল। সর্বাধিক চ্যালেঞ্জিং বিষয়টি ছিল চক্রটিকে সমাধানের পথে ছাড়ার সময় পথের মধ্যে চক্রগুলি নির্মূল করা।
নিম্নলিখিত দুটি লাইন কোড কেবল অঙ্কিত গ্রাফগুলি রেন্ডারিংয়ের জন্য ব্যবহৃত হয়, সুতরাং কোডটি গণনা করা হয় না, কারণ এটি সমাধানে নিযুক্ত হয় না।
o = Sequence[VertexLabels -> "Name", ImagePadding -> 10, GraphHighlightStyle -> "Thick",
ImageSize -> 600];
o2 = Sequence[ImagePadding -> 10, GraphHighlightStyle -> "Thick", ImageSize -> 600];
কোড ব্যবহৃত:
e[c_] := Cases[EdgeList[GridGraph[ConstantArray[5, 3]]], j_ \[UndirectedEdge] k_ /; (MemberQ[c, j] && MemberQ[c, k])]
m[] :=
Module[{d = 5, v = {1, 125}},
While[\[Not] MatchQ[FindShortestPath[Graph[e[v]], 1, 125], {1, __, 125}],
v = Join[v, RandomSample[Complement[Range[125], v], 1]]];
Graph[e[Select[ConnectedComponents[Graph[e[v]]], MemberQ[#, 1] &][[1]]]]]
w[gr_, p_] := EdgeDelete[gr, EdgeList[PathGraph[p]]]
y[p_, u_] := Select[Intersection[#, p] & /@ ConnectedComponents[u], Length[#] > 1 &]
g = HighlightGraph[lab = m[], PathGraph[s = FindShortestPath[lab, 1, 125]],o]
u = w[g, s]
q = y[s, u]
While[y[s, u] != {}, u = EdgeDelete[u, Take[FindShortestPath[u, q[[1, r = RandomInteger[Length@q[[1]] - 2] + 1]],
q[[1, r + 1]]], 2] /. {{a_, b_} :> a \[UndirectedEdge] b}];
q = y[s, u]]
g = EdgeAdd[u, EdgeList@PathGraph[s]];
Partition[StringJoin /@ Partition[ReplacePart[Table["x", {125}],
Transpose[{VertexList[g], Table["o", {Length[VertexList@g]}]}]/. {{a_, b_} :> a -> b}], {5}], 5]
নমুনা আউটপুট
ox "অক্সুও", "xxooo", "xoxxo", "xoxxo", "xxoox"}, {"ooxoo", "xoooo", "oxox", "oooxx", "xooxx"}, {"অক্সক্স", "ooxxo", "অক্সক্স", "xoxoo", "xxxoo"}, {"অক্সএক্সএক্সএক্স", "আওক্স", "xooox", "xoxxx", "ooxx"}, x "xxxxx", "অক্সক্স", "oooxx "," xoxoo "," oooxo "}
ফণা অধীনে
({{"ooxoo",...}}
উপরের চিত্রটি গোলকধাঁধা বা গোলকধাঁধা দেখায় যা উপরের প্রদর্শিত সমাধানের সাথে মিলে যায় :
এখানে 5x5x5 তে একই গোলকধাঁধা .োকানো হয়েছে GridGraph
। সংখ্যাযুক্ত শীর্ষটি গোলকধাঁধাটির বাইরে সবচেয়ে সংক্ষিপ্ত পথে নোড। কাঁটাচামচ বা সিদ্ধান্ত পয়েন্টগুলি 34, 64 এবং 114 নোট করুন I'll আমি গ্রাফটি রেন্ডারিংয়ের জন্য ব্যবহৃত কোডটি সমাধানের অংশ না হলেও অন্তর্ভুক্ত করব:
HighlightGraph[gg = GridGraph[ConstantArray[5, 3]], g,
GraphHighlightStyle ->"DehighlightFade",
VertexLabels -> Rule @@@ Transpose[{s, s}] ]
এবং এই গ্রাফটি গোলকধাঁধাটির সমাধান কেবলমাত্র দেখায়:
HighlightGraph[gg = GridGraph[ConstantArray[5, 3]],
Join[s, e[s]], GraphHighlightStyle -> "DehighlightFade", VertexLabels -> Rule @@@ Transpose[{s, s}] ]
পরিশেষে, কিছু সংজ্ঞা যা কোড পড়তে সহায়তা করতে পারে:
আসল সমাধান (432 চর, একটি পথ তৈরি করেছে তবে সত্যিকারের গোলকধাঁধা বা গোলকধাঁধা নয়)
স্বতন্ত্র ইউনিট কিউব দিয়ে গঠিত একটি 5x5x5 বৃহত কঠিন ঘনকটি কল্পনা করুন। নিম্নলিখিতটি ইউনিট কিউব ছাড়াই begins 1,1,1} এবং {5,5,5 at এ শুরু হয়, কারণ আমরা জানি যে তারা অবশ্যই সমাধানের অংশ হতে পারে। তারপরে rand 1,1,1} থেকে {5,5,5} অব্যাহত পথ না হওয়া পর্যন্ত এটি এলোমেলো কিউবগুলি সরিয়ে দেয়}
"গোলকধাঁধা" হ'ল ইউনিট কিউবস প্রদত্ত সংক্ষিপ্ততম পথ (যদি একাধিক সম্ভব হয়)।
d=5
v={1,d^3}
edges[g_,c_]:=Cases[g,j_\[UndirectedEdge] k_/;(MemberQ[c,j]&&MemberQ[c,k])]
g:=Graph[v,edges[EdgeList[GridGraph[ConstantArray[d,d]]],v]];
While[\[Not]FindShortestPath[g,1,d^3]!={},
v=Join[v,RandomSample[Complement[Range[d^3],v],1]]]
Partition[Partition[ReplacePart[
Table["x",{d^3}],Transpose[{FindShortestPath[g,1,d^3],Table["o",{Length[s]}]}]
/.{{a_,b_}:> a->b}],{d}]/.{a_,b_,c_,d_,e_}:> StringJoin[a,b,c,d,e],5]
উদাহরণ:
{{"ooxxx", "xxxxx", "xxxxx", "xxxxx", "xxxxx"},
{"xoxxx", "xoooo", "xxxxo", "xxxxo", "xxxxo"},
{"xxxxx", "xxxxx", "xxxxx", "xxxxx", "xxxxo"},
{"xxxxx", "xxxxx", "xxxxx", "xxxxx", "xxxxo"},
{"xxxxx", "xxxxx", "xxxxx", "xxxxx", "xxxxo"}}
প্রযুক্তিগতভাবে এটি এখনও সত্যিকারের গোলকধাঁধা নয়, যেহেতু কোনও ভুল পাল্টাতে পারে না। তবে আমি এটিকে শুরু হিসাবে আকর্ষণীয় মনে করেছি কারণ এটি গ্রাফ তত্ত্বের উপর নির্ভর করে।
রুটিনটি আসলে গোলকধাঁধা তৈরি করে তবে আমি সমস্ত খালি জায়গাগুলি প্লাগ ইন করে যা চক্রকে বাড়িয়ে তুলতে পারে। যদি আমি চক্র সরানোর কোনও উপায় খুঁজে পাই তবে আমি সেই কোডটি এখানে অন্তর্ভুক্ত করব।