-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathoffer-13-RobotMove.c
56 lines (49 loc) · 942 Bytes
/
offer-13-RobotMove.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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
#include <stdio.h>
#include "minunit.h"
int cal(int x, int y)
{
int ret = 0;
int tmp = 0;
while (x)
{
tmp += x % 10;
x = x / 10;
}
while (y)
{
tmp += y % 10;
y = y / 10;
}
return tmp;
}
int dfs(int m, int n, int k, int i, int j, int *visited)
{
if (i < 0 || i == m || j < 0 || j == n || visited[i * n + j] == 1 || cal(i, j) > k)
{
return 0;
}
visited[i * n + j] = 1;
return dfs(m, n, k, i + 1, j, visited) + dfs(m, n, k, i, j + 1, visited) + 1;
}
int movingCount(int m, int n, int k)
{
int visited[m * n];
memset(visited, 0, m * n * sizeof(int));
return dfs(m, n, k, 0, 0, visited);
}
MU_TEST(test_case)
{
mu_assert_int_eq(3, movingCount(2, 3, 1));
mu_assert_int_eq(1, movingCount(3, 1, 0));
mu_assert_int_eq(15, movingCount(16, 8, 4));
}
MU_TEST_SUITE(test_suite)
{
MU_RUN_TEST(test_case);
}
int main()
{
MU_RUN_SUITE(test_suite);
MU_REPORT();
return MU_EXIT_CODE;
}