-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathoffer-12-StringPathInMatrix.c
82 lines (71 loc) · 1.79 KB
/
offer-12-StringPathInMatrix.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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <stdio.h>
#include <stdbool.h>
#include "minunit.h"
bool dfs(char **board, int boardSize, int *boardColSize, char *word, int row, int col, int len)
{
if (row < 0 || col < 0 || row >= boardSize || col >= *boardColSize || board[row][col] != word[len])
{
return false;
}
if (strlen(word) - 1 == len)
{
return true;
}
char tmp = board[row][col];
// mark this element, avoid repeat check
board[row][col] = '/';
bool res = dfs(board, boardSize, boardColSize, word, row, col + 1, len + 1) ||
dfs(board, boardSize, boardColSize, word, row + 1, col, len + 1) ||
dfs(board, boardSize, boardColSize, word, row, col - 1, len + 1) ||
dfs(board, boardSize, boardColSize, word, row - 1, col, len + 1);
// roback reset
board[row][col] = tmp;
return res;
}
bool exist(char **board, int boardSize, int *boardColSize, char *word)
{
for (int i = 0; i < boardSize; i++)
{
for (int j = 0; j < *boardColSize; j++)
{
if (dfs(board, boardSize, boardColSize, word, i, j, 0))
{
return true;
}
}
}
return false;
}
MU_TEST(test_case)
{
char atrix[3][4] = {{'A', 'B', 'C', 'E'}, {'S', 'T', 'C', 'S'}, {'A', 'D', 'E', 'E'}};
char *p[3];
for (int i = 0; i < 3; i++)
{
p[i] = &atrix[i][0];
}
// char atrix = "ABTGCFCSJDEH";
char *word = "ABCCED";
int colSize = 4;
mu_check(true == exist(p, 3, &colSize, word));
char atrix2[2][2] = {{'a', 'b'}, {'c', 'd'}};
char *p2[2];
for (int i = 0; i < 3; i++)
{
p2[i] = &atrix2[i][0];
}
// char atrix = "ABTGCFCSJDEH";
char *word2 = "abcd";
int colSize2 = 2;
mu_check(false == exist(p2, 2, &colSize2, word2));
}
MU_TEST_SUITE(test_suite)
{
MU_RUN_TEST(test_case);
}
int main()
{
MU_RUN_SUITE(test_suite);
MU_REPORT();
return MU_EXIT_CODE;
}