প্রোগ্রামিং দৃষ্টিকোণ থেকে এটি (আইএমও) খুব আকর্ষণীয় সমস্যা নয়। আপনি একটি পুনরাবৃত্ত আলগোরিদিম নিয়ে আসতে পারেন যা প্রতিটি ব্যবস্থা চেষ্টা করে, এরকম কিছু:
bool try_queens(Board board, int n)
{
if (n == 0) {
// no queens left to place, so we're done
return true
}
// try each open position until we find one that works
for each position on the board {
if (is_empty(board, position) and not is_attacked(board, position)) {
place_queen(board, position)
if (try_queens(board, n-1)) {
return true
}
remove_queen(board, position)
}
}
// if we get this far, there's no available position
return false
}
main()
{
initialize board(X,Y)
return try_queens(board, N)
}
আপনি যদি সমস্যাটি সম্পর্কে কিছুটা ভাবেন, তবে আপনি বুঝতে পারবেন যে কোনও বোর্ডে N <কুইন ফিট করার কোনও উপায় নেই যেখানে এক্স <এন বা ওয়াই <এন রয়েছে কারণ এটির জন্য কমপক্ষে দুটি রানী একই র্যাঙ্ক বা ফাইলে সমাপ্ত হতে হবে, এবং তারা একে অপরকে আক্রমণ করবে। আপনি যদি এন-কুইন সমস্যা সম্পর্কে পড়ে থাকেন তবে আপনি দ্রুত শিখবেন যে এন> 3 এর জন্য একটি এনএক্সএন বোর্ডে এন কুইন্স স্থাপন করা সর্বদা সম্ভব Now এখন আমরা জানি যে উত্তরটি (এক্স <এন বা ওয়াই <এন) এর জন্য কোনও হয় না এবং হ্যাঁ (এক্স> = এন এবং ওয়াই> = এন, এন> 3) এর জন্য। যা কিছু বাকি রয়েছে তা বিশেষ কেস:
- এন = 1 (হ্যাঁ)
- এন = 2 (এক্স> = 2 এবং Y> 2 বা বিপরীতে ইয়েস)
- এন = 3 (এক্স> = 3 এবং ওয়াই> 3 বা বিপরীতে ইয়েস)
সুতরাং এখন আমাদের সুন্দর পুনরাবৃত্তি ফাংশন একটি সাধারণ ফাংশন হয়ে যায় যা কেবল N এবং X এবং Y এর সাথে তুলনা করে এবং একটি ক্যানড ফল দেয়। পারফরম্যান্স দৃষ্টিকোণ থেকে এটি দুর্দান্ত, যেহেতু আপনি অবিচ্ছিন্ন সময়ে উত্তর পেতে পারেন। প্রোগ্রামিং দৃষ্টিকোণ থেকে এটি এত দুর্দান্ত নয় কারণ আপনি উপলব্ধি করেছেন যে এই মুহুর্তে, প্রশ্নটি আপনার ধাঁধাটি যে কতটা ভাল সমাধান করতে পারে সে সম্পর্কে এটি আপনার পুনরাবৃত্তির ফাংশন লেখার ক্ষমতার তুলনায় আরও সত্য well
(এবং ছেলে ওহ ছেলে, আমি সত্যিই আশা করি যে আমি আমার স্মার্ট প্যান্টের জবাবটিতে কোনও বোবা ভুল করি নি। ;-)