uva 825(dp)

来源:互联网 发布:袖珍三公主淘宝 编辑:程序博客网 时间:2024/06/07 04:10

题意:一个图上有一些障碍物,问从左上角到右下角的最短路有几条。

题解:dp思路很简单,在一个可以走的点把他上方和左边的路径数量加到自己身上,主要是输入的处理比较麻烦,需要用读字符的方式读入障碍物的位置。

#include <stdio.h>#include <ctype.h>#include <string.h>const int N = 1005;int t, row, col, m[N][N], f[N][N];int main() {scanf("%d", &t);while (t--) {scanf("%d%d", &row, &col);memset(m, 0, sizeof(m));memset(f, 0, sizeof(f));int temp1, temp2;char c;for (int i = 0; i < row; i++) {scanf("%d", &temp1);temp2 = 0;while ((c = getchar()) == ' ');if (c != '\n') {while (1) {if (isdigit(c))temp2 = temp2 * 10 + c - '0';else if (c == ' ') {if (temp2 != 0) {m[temp1][temp2] = 1;temp2 = 0;}}else if (c == '\n') {if (temp2 != 0) {m[temp1][temp2] = 1;temp2 = 0;}break;}c = getchar();}}}f[1][1] = 1;for (int i = 1; i <= row; i++)for (int j = 1; j <= col; j++)if (!m[i][j])f[i][j] += f[i - 1][j] + f[i][j - 1];printf("%d\n", f[row][col]);if (t)printf("\n");}return 0;}

0 0
原创粉丝点击