Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C#

सी # का उपयोग करके गंतव्य तक पहुंचने के लिए नाइट द्वारा आवश्यक न्यूनतम कदम कैसे प्राप्त करें?

हमें बोर्ड की सभी कोशिकाओं को नाइट कवर करना है और यह केवल एक बार सेल में जा सकता है।

नाइट मूव को खत्म करने के दो तरीके हो सकते हैं - पहला जिसमें नाइट उस सेल से एक नाइट की दूरी पर है जहां से वह शुरू हुआ था, इसलिए यह उस स्थिति में जा सकता है जहां से यह शुरू हुआ था और एक लूप बना सकता है, इसे बंद कहा जाता है टूर, दूसरा जिसमें नाइट कहीं और खत्म होता है, इसे ओपन टूर कहा जाता है। एक चाल मान्य है यदि यह शतरंज की बिसात के अंदर है और यदि सेल पहले से ही कब्जा नहीं है। हम सभी खाली सेल का मान -1 के बराबर कर देंगे।

उदाहरण

using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
namespace ConsoleApplication{
   public class KnightWalkProblem{
      public class cell{
         public int x, y;
         public int dis;
         public cell(int x, int y, int dis){
            this.x = x;
            this.y = y;
            this.dis = dis;
         }
      }
      static bool isInside(int x, int y, int N){
         if (x >= 1 && x <= N && y >= 1 && y <= N)
            return true;
            return false;
      }
      public int minStepToReachTarget(int[] knightPos, int[] targetPos, int N){
         int[] dx = { -2, -1, 1, 2, -2, -1, 1, 2 };
         int[] dy = { -1, -2, -2, -1, 1, 2, 2, 1 };
         Queue<cell> q = new Queue<cell>();
         q.Enqueue(new cell(knightPos[0], knightPos[1], 0));
         cell t;
         int x, y;
         bool[,] visit = new bool[N + 1, N + 1];
         for (int i = 1; i <= N; i++)
         for (int j = 1; j <= N; j++)
            visit[i, j] = false;
         visit[knightPos[0], knightPos[1]] = true;
         while (q.Count != 0){
            t = q.Peek();
            q.Dequeue();
            if (t.x == targetPos[0] && t.y == targetPos[1])
               return t.dis;
            for (int i = 0; i < 8; i++){
               x = t.x + dx[i];
               y = t.y + dy[i];
               if (isInside(x, y, N) && !visit[x, y]){
                  visit[x, y] = true;
                  q.Enqueue(new cell(x, y, t.dis + 1));
               }
            }
         }
         return int.MaxValue;
      }
   }
   class Program{
      static void Main(string[] args){
         KnightWalkProblem kn = new KnightWalkProblem();
         int N = 30;
         int[] knightPos = { 1, 1 };
         int[] targetPos = { 30, 30 };
         Console.WriteLine(
            kn.minStepToReachTarget(
               knightPos,
               targetPos, N));
      }
   }
}

आउटपुट

20

  1. सी # में रिकर्सन का उपयोग करके किसी संख्या के अंकों का योग कैसे प्राप्त करें?

    रिकर्सन का उपयोग करके अंकों का योग प्राप्त करने के लिए, सी # में एक विधि सेट करें जो योग की गणना करता है। static int sum(int n) {    if (n != 0) {       return (n % 10 + sum(n / 10));    } else {       return 0;    } उपरोक्त विधि योग लौटात

  1. पायथन में बच्चे और विशाल कदमों द्वारा गंतव्य तक पहुंचने के लिए आवश्यक इष्टतम चरणों की संख्या खोजने के लिए कार्यक्रम

    मान लीजिए कि हमारे पास प्रश्नों की एक सूची है, जहां प्रत्येक प्रश्न Q[i] में एक त्रिक [a_i, b_i और d_i] है। मान लीजिए कि हम शुरू में स्थिति (0, 0) पर हैं, फिर एक चरण में हम किसी स्थिति (x1, y1) से (x2, y2) पर जा सकते हैं, जहां इन दो बिंदुओं के बीच यूक्लिडियन दूरी कम से कम a और अधिक से अधिक b है। अब

  1. पायथन का उपयोग करके किसी संख्या का फैक्टोरियल कैसे खोजें?

    किसी संख्या का गुणनखंड 1 और उसके बीच के सभी पूर्णांकों का गुणनफल होता है। किसी दी गई संख्या का भाज्य ज्ञात करने के लिए, आइए हम 1 से स्वयं की सीमा पर लूप के लिए बनाते हैं। याद रखें कि रेंज () फ़ंक्शन स्टॉप वैल्यू को बाहर करता है। इसलिए स्टॉप वैल्यू इनपुट नंबर से एक ज्यादा होना चाहिए। श्रेणी में प्रत