【发布时间】:2021-06-04 12:15:27
【问题描述】:
我正在尝试使用动态编程找到从左上角网格到右下角网格的方法数量,因此我使用map<pair<int, int>, int> 进行记忆。
当我尝试在地图中插入 k 值时,它不会存储在我的地图中,只有我的 c 和 r 整数被存储。为什么会这样?
#include <iostream>
#include <bits/stdc++.h>
#include <algorithm>
#include <stdbool.h>
#include <map>
using namespace std;
int grid(int r , int c , map<pair<int,int> ,int>& m1);
int main()
{
map<pair<int ,int>,int> m1;
int k=grid(2,3 ,m1);
cout<<k<<endl;
for(auto& it1:m1){
cout<<it1.first.first<<"\t"<<it1.first.second<<"\t"<<it1.second<<endl;
}
}
int grid(int r , int c , map<pair<int,int> ,int>& m1)
{
if(r==0 || c==0) return 0;
if(r==1 && c==1) return 1;
if(m1[{r,c}]!=NULL){return m1[{r,c}];}
int k=grid(r-1,c,m1)+grid(r,c-1,m1);
m1.insert({{r,c},k});
cout<<"k:"<<k<<endl;
return grid(r-1,c,m1)+grid(r,c-1,m1);
}
输出:------------------------------------
k:1
k:1
k:1
k:1
k:1
k:2
k:1
k:1
k:3
k:1
k:1
k:1
k:1
k:1
k:2
k:1
k:1
3
1 2 0
1 3 0
2 1 0
2 2 0
2 3 0
【问题讨论】:
-
还应该更改为
if (m1.find({r,c}) != m1.end()) { return m1[{r,c}]; }以正确测试密钥{r,c}是否已经存在,而不是使用NULL。
标签: c++ c++11 dynamic-programming