Return: #Include #Include #Define N 4 #Define VISITED - ALL (1 N) - 1
Return: #Include #Include #Define N 4 #Define VISITED - ALL (1 N) - 1
#include <stdio.h>
#include <limits.h>
#define N 4
#define VISITED_ALL (1<<N) - 1
int dist[N][N] = {
{0, 400, 500, 300},
{400, 0, 300, 500},
{500, 300, 0, 400},
{300, 500, 400, 0}
};
int dp[16][4];
int next[16][4];
next[mask][pos] = cityIndex;
return dp[mask][pos] = ans;
}
int main() {
for(int i = 0; i < (1<<N); i++) {
for(int j = 0; j < N; j++) {
dp[i][j] = -1;
next[i][j] = -1;
}
}
return 0;
}
//using dynamic programming and array (Longer code version but easier to understand)
#include <stdio.h>
#include <limits.h>
#define N 4
int dist[N][N] = {
{0, 1, 2, 1},
{1, 0, 1, 3},
{3, 1, 0, 2},
{1, 2, 1, 0}
};
int dp[1<<N][N];
int next[1<<N][N];
int mask = 0;
for(int i = 0; i < N; i++) {
if(visited[i]) {
mask |= (1 << i);
}
}
if(dp[mask][pos] != -1) {
return dp[mask][pos];
}
next[mask][pos] = cityIndex;
return dp[mask][pos] = ans;
}
int mask = 0;
for(int i = 0; i < N; i++) {
if(visited[i]) {
mask |= (1 << i);
}
}
int main() {
int visited[N] = {0};
visited[0] = 1;
return 0;
}
//Output:
//The minimum cost is 4
//The path is: A-->D-->C-->B-->A