solution.md 2.7 KB
Newer Older
每日一练社区's avatar
每日一练社区 已提交
1 2
# 最优路线

ToTensor's avatar
ToTensor 已提交
3 4
**题目描述**

每日一练社区's avatar
每日一练社区 已提交
5
探险队要穿越泥潭,必须选择可踩踏的落脚点。可是泥潭面积很大,落脚点又实在少得可怜,一不小心就会深陷泥潭而无法脱身。侦查员费尽周折才从老乡手里弄到了一份地图,图中标出了落脚点的位置,而且令人震惊的是:泥潭只有一条穿越路线,且对于 n×m 的地图,路线长度为 n+m-1!请编程为探险队找出穿越路线。
ToTensor's avatar
ToTensor 已提交
6 7 8

**输入描述**

每日一练社区's avatar
每日一练社区 已提交
9
两个整数 n 和 m,表示泥潭的长和宽。下面 n 行 m 列表示地形(0 表示泥潭,1 表示落脚点)
ToTensor's avatar
ToTensor 已提交
10 11 12

**输出描述**

每日一练社区's avatar
每日一练社区 已提交
13
用坐标表示穿越路线,坐标之间用 > 分隔
ToTensor's avatar
ToTensor 已提交
14 15 16 17

**样例输入**

```json
每日一练社区's avatar
每日一练社区 已提交
18 19 20 21 22 23 24
6 9
1 1 1 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0
0 0 0 0 1 0 0 0 0
0 0 0 0 1 1 0 0 0
0 0 0 0 0 1 1 1 1
0 0 0 0 0 0 0 0 1
ToTensor's avatar
ToTensor 已提交
25 26 27 28 29
```

**样例输出**

```json
每日一练社区's avatar
每日一练社区 已提交
30
(1,1)>(1,2)>(1,3)>(2,3)>(2,4)>(2,5)>(3,5)>(4,5)>(4,6)>(5,6)>(5,7)>(5,8)>(5,9)>(6,9)
ToTensor's avatar
ToTensor 已提交
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
```

以下程序实现了这一功能,请你填补空白处的内容:

```cpp
#include <stdio.h>
#include <string.h>
const int N = 101;
int map[N][N];
int n, m;
struct point
{
    int l, r;
} node[N];
int ans;
void DFS(int x, int y)
{
    if (x == n && y == m)
    {
        for (int i = 1; i < ans; i++)
            printf("(%d,%d)>", node[i].l, node[i].r);
        printf("(%d,%d)\n", x, y);
    }
    else
    {
        if (map[x][y] == 1 && x <= n && y <= m)
        {
            node[ans].l = x;
            node[ans].r = y;
            ans++;
            DFS(x + 1, y);
            DFS(x, y + 1);
        }
    }
}
int main()
{
    while (scanf("%d%d", &n, &m) != EOF)
    {
        ans = 1;
        memset(map, 0, sizeof(map));
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= m; j++)
                scanf("%d", &map[i][j]);
        DFS(1, 1);
    }
    return 0;
}
```
每日一练社区's avatar
每日一练社区 已提交
80 81 82 83 84 85

## template

```cpp
#include <stdio.h>
#include <string.h>
ToTensor's avatar
ToTensor 已提交
86
const int N = 101;
每日一练社区's avatar
每日一练社区 已提交
87
int map[N][N];
ToTensor's avatar
ToTensor 已提交
88 89 90 91 92
int n, m;
struct point
{
    int l, r;
} node[N];
每日一练社区's avatar
每日一练社区 已提交
93
int ans;
ToTensor's avatar
ToTensor 已提交
94
void DFS(int x, int y)
每日一练社区's avatar
每日一练社区 已提交
95
{
ToTensor's avatar
ToTensor 已提交
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
    if (x == n && y == m)
    {
        for (int i = 1; i < ans; i++)
            printf("(%d,%d)>", node[i].l, node[i].r);
        printf("(%d,%d)\n", x, y);
    }
    else
    {
        if (map[x][y] == 1 && x <= n && y <= m)
        {
            node[ans].l = x;
            node[ans].r = y;
            ans++;
            DFS(x + 1, y);
            DFS(x, y + 1);
        }
    }
每日一练社区's avatar
每日一练社区 已提交
113 114 115
}
int main()
{
ToTensor's avatar
ToTensor 已提交
116 117 118 119 120 121 122 123 124 125
    while (scanf("%d%d", &n, &m) != EOF)
    {
        ans = 1;
        memset(map, 0, sizeof(map));
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= m; j++)
                scanf("%d", &map[i][j]);
        DFS(1, 1);
    }
    return 0;
每日一练社区's avatar
每日一练社区 已提交
126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
}
```

## 答案

```cpp

```

## 选项

### A

```cpp

```

### B

```cpp

```

### C

```cpp

```