Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

가중치가 정확히 X이고 C++에서 가중치 M의 모서리가 하나 이상 있는 경로 수를 계산합니다.

<시간/>

무한한 수준을 가질 수 있는 트리, 노드가 가질 수 있는 자식의 수를 저장할 변수 자식, 경로와 관련된 가중치를 저장할 변수 가중치 및 경로와 작업을 저장할 변수 경로가 주어집니다. 가중치가 X와 같고 주어진 가중치를 가진 최소한 하나의 간선이 있어야 하는 경로의 수를 계산합니다.

입력 - int 자식 =4, 가중치 =4, 경로 =4;

출력 - 가중치가 정확히 X이고 가중치 M의 모서리가 하나 이상 있는 경로 수는 다음과 같습니다. 1

설명 - 4개의 경로와 연결된 4개의 자식이 있고 경로와 관련된 가중치가 4인 노드가 주어졌기 때문입니다. 따라서 가중치가 4인 경로는 하나만 있을 수 있음을 알 수 있습니다. 즉 1 - 4이므로 개수는 1입니다.

입력 - int 자식 =3, 가중치 =2, 경로 =4;

출력 - 가중치가 정확히 X이고 가중치 M의 모서리가 하나 이상 있는 경로 수는 다음과 같습니다. 4

설명 - 4개의 경로와 연결된 3개의 자식이 있고 경로와 관련된 가중치가 2인 노드가 제공됩니다. 따라서 가중치가 2인 4개의 경로(예:1-1, 1-2, 2-1 및 2-1)가 있을 수 있으므로 개수는 4입니다.

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.

  • 변수의 자식, 가중치, 경로 각각에 각 경로와 연관된 자식, 경로 및 가중치의 총계를 입력합니다.
  • 주어진 크기의 배열을 선언합니다.
  • 배열의 크기까지 i에서 0까지 FOR 루프를 시작합니다. 루프 내에서 j가 2보다 작을 때까지 j에서 0까지 다른 루프 FOR를 시작한 다음 arr[i][j]를 -1로 설정합니다.
  • 이제 path, 0, weight, child 및 arr을 함수의 인수로 전달하여 total_weight() 함수를 호출합니다.
  • 함수 내부
    • 결과를 저장할 임시 변수 개수를 선언합니다.
    • IF 경로가 0보다 작은지 확인한 다음 0을 반환합니다.
    • IF 경로가 0인지 확인한 다음 i를 반환합니다.
    • arr[경로][i]가 1과 같지 않은지 확인한 다음 arr[경로][i]를 반환합니다.
    • 자식까지 j에서 1까지 FOR 루프를 시작합니다. 루프 내에서 path-j, 1, weight, child 및 arr을 함수에 인수로 전달하여 total_weight() 함수에 대한 재귀 호출로 IF j가 set count보다 가중치인지 확인합니다.
    • 그렇지 않으면 path-j, i, weight, child 및 arr을 함수에 인수로 전달하여 total_weight() 함수에 대한 재귀 호출로 count를 설정합니다.
    • arr[경로][i]를 개수로 설정하고
  • 반환[경로][i]
  • 결과를 인쇄합니다.

#include <bits/stdc++.h>
using namespace std;
#define size 4
#define col 4
int total_weight(int path, int i, int weight, int child, int arr[size + 1][col]) {
   int count = 0;
   if (path < 0) {
      return 0;
   }
   if (path == 0) {
      return i;
   }
   if (arr[path][i] != -1) {
      return arr[path][i];
   }
   for (int j = 1; j <= child; j++) {
      if (j == weight) {
         count += total_weight(path - j, 1, weight, child, arr);
      } else {
         count += total_weight(path - j, i, weight, child, arr);
      }
   }
   arr[path][i] = count;
   return arr[path][i];
}
int main() {
   int child = 4, weight = 4, path = 4;
   int arr[size + 1][col];
   for (int i = 0; i <= size; i++) {
      for (int j = 0; j < 2; j++) {
         arr[i][j] = -1;
      }
   }
   cout << "Count of number of paths whose weight is exactly X and has at-least one edge of weight M are: " << total_weight(path, 0, weight, child, arr);
}

위의 코드를 실행하면 다음과 같은 출력이 생성됩니다 -

출력

Count of number of paths whose weight is exactly X and has at-least one edge of weight M are: 1