DP 주제 5가지 다른 경로||

주제:

아이디어:

        이 질문에 대한 아이디어는  Different Paths |  아이디어가 다릅니다. 유일한 차이점은 장애물이 있다는 것입니다. 2차원 dp 배열을 초기화할 때 로봇은 장애물이 있는 곳으로만 ​​이동할 수 있다는 사실에 주의해야 합니다. 첫 번째 열에서는 장애물 블록을 만나면 뒤는 0, 앞은 1의 초기값을 갖는다. 장애물 블록이 2차원 지도에 있는 경우 dp 위치는 장애물 블록을 건너뛰어야 합니다. 즉, dp[][] 장애물 블록은 0이어야 합니다.

코드는 아래에 자세히 설명되어 있습니다.

int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid)
{
	// 获取地图大小
	int n = obstacleGrid.size();
	int m = obstacleGrid[0].size();
	
	// 定义dp数组
	int dp[200][200];
	memset(dp,0,sizeof dp);
	
	// dp数组初始化
	for(int i = 0;i < m;++i)
	{
		if(!obstacleGrid[0][i])
		{
			dp[0][i] = 1;
		}else break;
	}
	for(int i = 0;i < n;++i)
	{
		if(!obstacleGrid[i][0])
		{
			dp[i][0] = 1;
		}else break;
	}
	
	// 开始dp寻值
	for(int i = 1;i < n;++i)
	{
		for(int j = 1;j < m;++j)
		{
			// 如果遇到障碍块,则跳过dp
			if(obstacleGrid[i][j]) continue;
			
			// dp 递推公式
			dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
		}
	}
	// 返回结果
	return dp[n - 1][m - 1];
}

마지막 커밋:

추천

출처blog.csdn.net/hacker_51/article/details/132896323