#include\x20\x20//\x20包含输入输出流的库\n#include\x20\x20//\x20包含队列的库\n#include\x20\x20//\x20包含字符串处理函数的库\n\nusing\x20namespace\x20std;\n\nstruct\x20Node\x20{\x20//\x20定义结构体Node,包含坐标和距离\n\x20\x20int\x20x,\x20y;\x20//\x20坐标\n\x20\x20int\x20d;\x20//\x20距离\n};\n\nqueue\x20Q;\x20//\x20定义队列Q,用于BFS遍历\nint\x20dx[4]\x20=\x20{-1,\x201,\x200,\x200};\x20//\x20定义x方向的移动数组\nint\x20dy[4]\x20=\x20{0,\x200,\x20-1,\x201};\x20//\x20定义y方向的移动数组\nint\x20mp[1005][1005]\x20=\x20{};\x20//\x20定义地图\nint\x20vis[1005][1005];\x20//\x20定义访问数组\nint\x20n\x20=\x205,\x20m\x20=\x205;\x20//\x20地图的大小\n\nint\x20BFS(int\x20sx,\x20int\x20sy)\x20{\x20//\x20定义BFS函数,参数是起始点的坐标\n\x20\x20memset(vis,\x200,\x20sizeof(vis));\x20//\x20初始化访问数组为0\n\x20\x20int\x20cnt\x20=\x200;\x20//\x20定义计数器\n\x20\x20Node\x20st;\x20//\x20定义起始节点\n\x20\x20st.x\x20=\x20sx;\x20//\x20起始节点的x坐标\n\x20\x20st.y\x20=\x20sy;\x20//\x20起始节点的y坐标\n\x20\x20st.d\x20=\x200;\x20//\x20起始节点的距离为0\n\x20\x20vis[sx][sy]\x20=\x201;\x20//\x20将起始节点标记为已访问\n\x20\x20cnt++;\x20//\x20计数器加1\n\x20\x20Q.push(st);\x20//\x20将起始节点加入队列\n\x20\x20while\x20(!Q.empty())\x20{\x20//\x20当队列不为空时循环\n\x20\x20\x20\x20Node\x20u\x20=\x20Q.front();\x20//\x20取出队头节点\n\x20\x20\x20\x20Q.pop();\x20//\x20弹出队头节点\n\x20\x20\x20\x20for\x20(int\x20i\x20=\x200;\x20i\x20<\x204;\x20i++)\x20{\x20//\x20遍历四个方向\n\x20\x20\x20\x20\x20\x20Node\x20v;\x20//\x20定义新节点\n\x20\x20\x20\x20\x20\x20v.x\x20=\x20u.x\x20+\x20dx[i];\x20//\x20新节点的x坐标\n\x20\x20\x20\x20\x20\x20v.y\x20=\x20u.y\x20+\x20dy[i];\x20//\x20新节点的y坐标\n\x20\x20\x20\x20\x20\x20if\x20(v.x\x20<\x201\x20||\x20v.y\x20<\x201\x20||\x20v.x\x20>\x20n\x20||\x20v.y\x20>\x20m\x20||\x20mp[v.x][v.y]\x20==\x201\x20||\x20vis[v.x][v.y]\x20==\x201)\n\x20\x20\x20\x20\x20\x20\x20\x20continue;\x20//\x20如果新节点越界或者是障碍物或者已经访问过,则跳过当前循环\n\x20\x20\x20\x20\x20\x20vis[v.x][v.y]\x20=\x201;\x20//\x20标记新节点为已访问\n\x20\x20\x20\x20\x20\x20v.d\x20=\x20u.d\x20+\x201;\x20//\x20新节点的距离为当前节点的距离+1\n\x20\x20\x20\x20\x20\x20cnt++;\x20//\x20计数器加1\n\x20\x20\x20\x20\x20\x20Q.push(v);\x20//\x20将新节点加入队列\n\x20\x20\x20\x20}\n\x20\x20}\n\x20\x20return\x20cnt;\x20//\x20返回计数器的值,即可达到的节点数\n}\n\nint\x20main()\x20{\n\x20\x20for\x20(int\x20i\x20=\x201;\x20i\x20<=\x20n;\x20i++)\x20{\x20//\x20读入地图\n\x20\x20\x20\x20for\x20(int\x20j\x20=\x201;\x20j\x20<=\x20m;\x20j++)\x20{\n\x20\x20\x20\x20\x20\x20cin\x20>>\x20mp[i][j];\n\x20\x20\x20\x20}\n\x20\x20}\n\x20\x20int\x20a\x20=\x20BFS(1,\x201);\x20//\x20调用BFS函数,起始点为(1, 1)\n\x20\x20cout\x20<<\x20a;\x20//\x20输出可达到的节点数\n\x20\x20return\x200;\n


原文地址: https://www.cveoy.top/t/topic/pZUj 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录