CODE[VS]1026 逃跑的拉尔夫
2017-09-25 11:12
369 查看
题目:http://codevs.cn/problem/1026/
思路:深度搜索可能的终点,记录每个访问点,防止被二次搜索。
题解:
思路:深度搜索可能的终点,记录每个访问点,防止被二次搜索。
题解:
/* 1026 逃跑的拉尔夫 */ #include <stdio.h> #define MAXRC 51 #define MAXL 1005 int r, c; /* 小镇地图行,列数 */ char map[MAXRC][MAXRC]; /* 小镇地图存储 */ char run_map[MAXRC][MAXRC]; /* 逃跑地图 */ int n; /* 路径长度 */ char path[MAXL]; /* 路径存储 */ int sx, sy; /* 初始位置坐标 */ int visited[MAXL][MAXRC][MAXRC]; /* 已访问的状态 */ /* 逃跑路径 */ void run(int p, int x, int y){ int i; /* 判断该状态是否已访问 */ if(1 == visited[p][x][y]){ return; } else{ visited[p][x][y] = 1; } /* 逃跑路径遍历结束,检测位置是否有效 */ if(p > n){ run_map[x][y] = '*'; } else { /* 移动到下一个位置 */ i = 1; switch(path[p]){ case 'N': // 北 while(y - i >= 1){ if(map[x][y - i] == '.'){ run(p + 1, x, y - i); i++; } else{ break; } } break; case 'S': //南 while(y + i <= r){ if(map[x][y + i] == '.'){ run(p + 1, x, y + i); i++; } else{ break; } } break; case 'W': //西 while(x - i >= 1){ if(map[x - i][y] == '.'){ run(p + 1, x - i, y); i++; } else{ break; } } break; case 'E': //东 while(x + i <= c){ if(map[x + i][y] == '.'){ run(p + 1, x + i, y); i++; } else{ break; } } break; default: break; } } } /* 主函数人口 */ int main(int argc, char *argv[]) { int i, x, y; /* 索引值 */ char str[MAXRC]; /* 字符串输入缓存 */ /* 建立数据文件指针,并打开数据文件 */ FILE *fp; if(NULL == (fp = fopen("data.txt", "r"))){ return 1; } /***********************************/ /* 读取小镇地图大小 */ fscanf(fp, "%d %d", &r, &c); /* 获取小镇地图 */ for(y = 1; y <= r; y++){ fscanf(fp, "%s", str); for(x = 1; x <= c; x++){ map[x][y] = str[x - 1]; /* 记录初始位置 */ if('*' == str[x - 1]){ sx = x; sy = y; } } } /* 获取路径长度 */ fscanf(fp, "%d", &n); /* 获取路径 */ for(x = 1; x <= n; x++){ fscanf(fp, "%s", str); path[x] = str[0]; } /* 复制地图到逃跑地图 */ for(y = 1; y <= r; y++){ for(x = 1; x <= c; x++){ run_map[x][y] = map[x][y]; } } /* 初始化路径访问状态 */ for(i = 1; i <= n; i++){ for(x = 1; x <= c; x++){ for(y = 1; y <= r; y++){ visited[i][x][y] = 0; } } } /* 逃跑路径模拟 */ run_map[sx][sy] = map[sx][sy] = '.'; run(1, sx, sy); /* 打印结果 */ for(y = 1; y <= r; y++){ for(x = 1; x <= c; x++){ printf("%c", run_map[x][y]); } printf("\n"); } /* 关闭文件 */ fclose(fp); /***********/ return 0; }
相关文章推荐
- CODE[VS] 1026 逃跑的拉尔夫(模拟)
- codevs--1026 逃跑的拉尔夫
- codevs1026 逃跑的拉尔夫
- codevs1026 逃跑的拉尔夫(搜索)
- codevs 1026 逃跑的拉尔夫(BFS)
- codevs 1026 逃跑的拉尔夫 模拟
- [codevs1026] 逃跑的拉尔夫
- codevs 1026_逃跑的拉尔夫_bfs
- CODE[VS] 1026 逃跑的拉尔夫
- Codevs1026 SEARCH(逃跑的拉尔夫 )(BFS)
- CODE[VS] 1026 逃跑的拉尔夫
- codevs 1026 逃跑的拉尔夫 BFS
- codevs 1026 逃跑的拉尔夫 x
- code[vs]1026 逃跑的拉尔夫(bfs+判重)
- codevs 1026 逃跑的拉尔夫
- 宽度优先搜索 之 CODE[VS] 1026 逃跑的拉尔夫
- Codevs 1026 逃跑的拉尔夫
- 【codevs1026】逃跑的拉尔夫,广搜的胜利
- (昨天的)codevs天梯 逃跑的拉尔夫 dfs
- 【codevs 1026】逃跑的拉尔夫