- Data Structure
- Networking
- RDBMS
- Operating System
- Java
- MS Excel
- iOS
- HTML
- CSS
- Android
- Python
- C Programming
- C++
- C#
- MongoDB
- MySQL
- Javascript
- PHP
- Physics
- Chemistry
- Biology
- Mathematics
- English
- Economics
- Psychology
- Social Studies
- Fashion Studies
- Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Count number of paths whose weight is exactly X and has at-least one edge of weight M in C++
We are given a tree which can have endless levels, a variable child which will store the number of children a node can have, a variable weight which will store the weight associated with the path and a variable path that will store the path and task is to calculate the count of number of paths which has weights equals to the X and there must be an at least one edge with the given weight.
For Example
Input - int child = 4, weight = 4, path = 4;
Output - Count of number of paths whose weight is exactly X and has at-least one edge of weight M are: 1
Explanation - As we are given with the node having 4 children connected with 4 paths and have weight of 4 associated with the path. So, we can see that there can only be one path with the weight as 4 i.e. 1 - 4 therefore the count is 1.
Input - int child = 3, weight = 2, path = 4;
Output - Count of number of paths whose weight is exactly X and has at-least one edge of weight M are: 4
Explanation - As we are given with the node having 3 children connected with 4 paths and have weight of 2 associated with the path. So, we can see that there can be four paths with the weight as 2 i.e. 1-1, 1 - 2, 2-1 and 2-1 therefore, the count is 4.
Approach used in the below program is as follows
- Input the total number of children, paths and weight associated with each path in the variable's child, weight and path respectively.
- Declare an array of given size.
- Start loop FOR from i to 0 till the size of an array. Inside the loop, start another loop FOR from j to 0 till j less than 2 and then set arr[i][j] as -1.
- Now call the function total_weight() by passing path, 0, weight, child and arr as an argument to the function.
- Inside the function,
- Declare a temporary variable count to store the result.
- Check IF path less than 0 then return 0
- Check IF path equals 0 then return i
- Check IF arr[path][i] not equals to 1 then return arr[path][i]
- Start loop FOR from j to 1 till child. Inside the loop, check IF j equals weight than set count as a recursive call to the function total_weight() function by passing path-j, 1, weight, child and arr to the function as an argument.
- Else, set count as a recursive call to the function total_weight() function by passing path-j, i, weight, child and arr to the function as an argument.
- Set arr[path][i] as count and
- Return arr[path][i]
- print the result.
Example
#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); }
If we run the above code it will generate the following output −
Output
Count of number of paths whose weight is exactly X and has at-least one edge of weight M are: 1