本文共 1532 字,大约阅读时间需要 5 分钟。
链接:https://vjudge.net/contest/211072#problem/D 我记得以前做过.... 然后理所当然地刽= = 带这个标点怕是没法写文档了 油田dfs的题 把四周【四周】方向*8 的都去访问一遍 可以用for(-1 1) for(-1 1) *z转移 i不变 j dp[i][j] 首先判断遇到@ 才去进行访问 其次在访问的时候 如果在八个方向上遇到@ 就把它标记成为* (adds 去搜索一下它的八方 八方都回来 都消除印记遍布满了才哦几百块) 如果访问的时候就是* 直接退出 进行下一个访问 dp里和dp外都是这样 最后给个sum就好了...对那些 还没有被苟延残喘吞并了的= = 【结果!!!!!结果你都不知道发生了什么】 我竟然错错错错错错是我的错] 【我竟然错了一个小时才对。。。我的妈呀】 【好吧这是第一次手打之后ac的(糊脸)以前手打了WA TE什么的】 【明明是个很简单的题啊!!!!!!】 【那么我们来看问题出在了哪里】 附上代码: 需要注意的: (一)、 死在这里了...(死numade) x += i; y += j; dfs(x+i,y+j) 一个是x=x+i y=y+j 一个是x+i y+j 就比如对(0,0)的遍历啊.... 不同的i j都换一遍 但是如果x的值被改变了 那 0先加上-1 又+0 又加1 最后他dfs的是y-1 y-1 y 对不对。千万要当心.... (二)、 下标问题,因为学长讲的时候貌似讲到这个……混了混了 就是 i是从1开始还是0开始,然后对应到,判断边界的时候是等于还是小于/巴拉巴拉 不复杂 但是要分清楚 但是要分清楚 就比如,for(i=1;;....) scanf("%s",maze[i]+1); 字符串是下标啊(大概)然后char还是什么这种东西其实是有char指针的 这样写的话,没有用& ,但是数组里面是从首地址(0)之后的一个地址开始的(1) fine 然后dfs内部其实不用怕,还是用哪个-1到1 的可以,因为这里不是坐标而是表示的在它的八个方向 (三)、 if (s[x][y] == '@') { s[x][y] ='*'; 其实是一点小错误...就是那个分号写在哪里 经常会犯,for循环和其他 for循环啊for循大于环一句话括号啊括号#include****最后能怎么实现怕是又是另外一回事儿了 10分钟 600字妥妥的啊 1000都没问题(#include #include using namespace std;int m, n;char s[120][120];void dfs(int x, int y){ if (x < 0 || y<0 || x == m || y == n) return; if (s[x][y] == '@') { s[x][y] ='*';**************************** //{ for (int i = -1; i <= 1;i++) { for (int j = -1; j <= 1;j++) { // x += i; //y += j; dfs(x+i,y+j);//【变量变在这里啊啊啊啊】 } } } /* for (int i = 0; i > s[i][j]; //scanf("%s", s[i]+1); int sum = 0; for (i = 0; i
转载地址:http://ymuti.baihongyu.com/