예제 #1
0
int minCostPath(int arr[3][3],int n,int i,int j){
    if(i<0 || j<0) return INT_MAX;
    if(dp[i][j]!=-1) return dp[i][j];
    if(i==0 && j==0) return dp[i][j]=arr[i][j];
    count++;
    return dp[i][j]=arr[i][j]+min(minCostPath(arr,n,i-1,j),minCostPath(arr,n,i,j-1),minCostPath(arr,n,i-1,j-1));
}
int minCostPath(int i,int j,int a[R][C]){
	
	if(i<0 || j<0)
		return INT_MAX;
	else if(i==0 && j==0){
		return a[i][j];	
    }
	else 
		return a[i][j]+min(minCostPath(i-1,j-1,a),minCostPath(i-1,j,a),minCostPath(i,j-1,a));	

}
int main(){	
	
	int arr[i][j] = {{1,2,3},{4,8,2},{1,5,3}};
	
	printf("minCostPath:%d",minCostPath(i,j,arr));
	
	return 0;	
}
int main(){	

	int arr[R][C] = {{1,2,3},{4,8,2},{1,5,3}};
	
	const int i=3,j=3;
	
	printf("minCostPath:%d",minCostPath(i-1,j-1,arr));
	
	return 0;	
}
예제 #5
0
int main(int argc, char const *argv[]) {
    //r=c=3;

    init(3);
    int cost[3][3] = { {1, 2, 3},
                       {4, 8, 2},
                       {1, 5, 3} };
    printf("%d\n",minCostPath(cost,2,2,2));
    printf("%d\n",count);
    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++) printf("%d ",dp[i][j]);
        printf("\n");
    }
    return 0;

}