随笔分类 - BFS
摘要:1 #include <math.h> 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <string.h> 5 #include <memory.h> 6 7 int mat[1010][1010]; 8 int i, nNum, tx, ty, ai, bi; 9 int dx[] = {-1, 1, 0, 0};10 int dy[] = {0, 0, -1, 1};11 12 struct path13 {14 int x, y, step;15 }q[1000010
阅读全文
摘要:1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int vis[305][305], mat[305][305]; 5 int dx[] = {-2, -2, -1, 1, 2, 2, 1, -1}; 6 int dy[] = {-1, 1, 2, 2, 1, -1, -2, -2}; 7 int casenum, nNum, sx, sy, tx, ty, i; 8 9 struct point10 {11 int x, y;12 }cur, next, q[90005]={0};13 14 int IsInBound(i
阅读全文
摘要:在HDOJ上提交通过以后,再在zoj上提交,结果得到了无数个WA,后来发现有一种情况我并没有考虑到有几个关键的地方需要注意:1. Angel的朋友不只有一个,可能有多个2. guard的存在可能会破坏广度优先树解决办法:BFS的做法:必须要保存guard与可行点‘.’的插入同步,因为guard的costTime不同,应该先不改变其坐标,costTime增加一以后,设为已被访问,‘x’变为‘.’或者‘#’,重新入队,此时,guard已被插入到队列的尾部,这样一来,guard与‘.’就可以同步了View Code 1 #include <math.h> 2 #include <s
阅读全文
摘要:之前一直没有认认真真地花时间去思考这个题目。。。。。。。分析:(关键在于如何建立状态)(1)对于任何格子,都需要考虑是走还是飞(2)如果当前格子是@,那么就只能飞根据current和next的格子,有以下:(1)当前是@,则无论下一步是什么,下一步都必须要飞,不飞会掉进陷阱的,耗费1s和1magic(2)当前是“.” 下一格是@,则下一步必须要飞,@不能走,耗费1s和1magic 下一格式“.”,则下一步需要考虑两种情况,第一种是步行,耗费2s和0magic,第二种是飞,耗费1s和1magic状态的建立:考虑到每一格可能是飞,也可能是步行,而飞与步行最终导致该格...
阅读全文
摘要:经典BFS+记忆表解题思路:因为存在具有Hp为n的monster存在,如果直接压入队列,就有可能破坏广度优先树,因此必须在处理的过程中保证monster和‘.’的处理是保存同步的,处理方法:如果当前位置是monster,那么我就削减他一个HP,再压入队尾,直到HP为0时,把地图上monster的位置置为‘.’可行位置,这样一来,monster和‘.’的处理就同步了路径记录:运用到算法导论上的记忆化BFS,具体的操作是建立一个记忆表// 一次AC 0MS 444K 1 #include <queue> 2 #include <stdio.h> 3 #include <
阅读全文

浙公网安备 33010602011771号