int main (int argc, char **argv) { int i, c, bs = 1024, flags = FTW_MOUNT|FTW_PHYS|FTW_CHDIR|FTW_ACTIONRETVAL; log_options_t log_options = { .log_ident = argv[0], .log_dest = LOGD_STDERR, .log_opts = LOGO_PRIO|LOGO_IDENT, }; log_init(&log_options); atexit(log_close); while (1) { c = getopt(argc, argv, "+hvcsirb:x:"); if (c == -1) break; switch (c) { case 'h': usage(EXIT_SUCCESS); case 'v': printf("%s\n", rcsid); exit(EXIT_SUCCESS); break; case 'c': flags &= ~FTW_MOUNT; break; case 's': do_space = 1; break; case 'i': do_inode = 1; break; case 'r': do_hr = 1; break; case 'b': sscanf(optarg, "%d", &bs); break; case 'x': sscanf(optarg, "%" SCNu32, &xid); if (xid == 1 || xid > 65535) log_error_and_die("invalid xid: %d", xid); break; default: usage(EXIT_FAILURE); } } if (!do_space && !do_inode) log_error_and_die("no action specified: use -s and/or -i"); if (optind == argc) count_path(".", flags, bs); else for (i = optind; i < argc; i++) count_path(argv[i], flags, bs); return errcnt > 0 ? EXIT_FAILURE : EXIT_SUCCESS; }
int main (void) { auto n = count_path(5, 5); std::cout << n << std::endl; std::vector<std::vector<bool>> A(5, std::vector<bool>(5, true)); A[3][3] = false; auto n_with_obstacle = count_path_with_obstacle(A); std::cout << n_with_obstacle << std::endl; return 0; }
int looking_for_one_way_paths(void) { int num_of_paths = 0; for (int i = 0; i < size_of_column - 1; ++i) for (int j = 0; j < size_of_line -1; ++j) if (grid_transformed[i][j] == 4) find_path(i, j); for (int i = 0; i < size_of_column - 1; ++i) for (int j = 0; j < size_of_line -1; ++j) if (grid_transformed[i][j] == 3) find_path(i, j); for (int i = 0; i < size_of_column - 1; ++i) for (int j = 0; j < size_of_line -1; ++j) if (grid_transformed[i][j] == 2) { count_path(i, j); num_of_paths++; } return num_of_paths; }
void count_path(int i, int j) { int i1, j1; grid_transformed[i][j] = -2; if (grid[i][j] == 0) { if (grid[i][j-1] < 4 && grid_transformed[i][j-1] == 2 && j-1 >= 0) { i1 = i; j1 = j-1; count_path(i1, j1); } if (grid[i-1][j] < 4 && grid_transformed[i-1][j] == 2 && i-1 >= 0) { i1 = i-1; j1 = j; count_path(i1, j1); } if (grid[i][j+1] < 2 && grid_transformed[i][j+1] == 2 && j+1 < size_of_line - 1) { i1 = i; j1 = j+1; count_path(i1, j1); } if ((!grid[i+1][j] || grid[i+1][j] == 2) && grid_transformed[i+1][j] == 2 && i+1 < size_of_column - 1) { i1 = i+1; j1 = j; count_path(i1, j1); } } if (grid[i][j] == 1) { if (grid[i][j-1] < 4 && grid_transformed[i][j-1] == 2 && j-1 >= 0) { i1 = i; j1 = j-1; count_path(i1, j1); } if (grid[i][j+1] < 2 && grid_transformed[i][j+1] == 2 && j+1 < size_of_line - 1) { i1 = i; j1 = j+1; count_path(i1, j1); } if ((!grid[i+1][j] || grid[i+1][j] == 2) && grid_transformed[i+1][j] == 2 && i+1 < size_of_column - 1) { i1 = i+1; j1 = j; count_path(i1, j1); } } if (grid[i][j] == 2) { if (grid[i-1][j] < 4 && grid_transformed[i-1][j] == 2 && i-1 >= 0) { i1 = i-1; j1 = j; count_path(i1, j1); } if (grid[i][j+1] < 2 && grid_transformed[i][j+1] == 2 && j+1 < size_of_line - 1) { i1 = i; j1 = j+1; count_path(i1, j1); } if ((!grid[i+1][j] || grid[i+1][j] == 2) && grid_transformed[i+1][j] == 2 && i+1 < size_of_column - 1) { i1 = i+1; j1 = j; count_path(i1, j1); } } if (grid[i][j] == 3) { if (grid[i][j+1] < 2 && grid_transformed[i][j+1] == 2 && j+1 < size_of_line - 1) { i1 = i; j1 = j+1; count_path(i1, j1); } if ((!grid[i+1][j] || grid[i+1][j] == 2) && grid_transformed[i+1][j] == 2 && i+1 < size_of_column - 1) { i1 = i+1; j1 = j; count_path(i1, j1); } } }