当前位置: 首页 > news >正文

购买一个小程序多少钱网站seo快速优化

购买一个小程序多少钱,网站seo快速优化,php网站建设与维护,作业3 主题资源网站建设寻路算法小demo 寻路算法有两种,一种是dfs 深度优先算法,一种是 dfs 深度优先算法 深度优先搜索的步骤分为 1.递归下去 2.回溯上来。顾名思义,深度优先,则是以深度为准则,先一条路走到底,直到达到目标。这…

 寻路算法小demo

寻路算法有两种,一种是dfs 深度优先算法,一种是

dfs 深度优先算法

深度优先搜索的步骤分为 1.递归下去 2.回溯上来。顾名思义,深度优先,则是以深度为准则,先一条路走到底,直到达到目标。这里称之为递归下去。

否则既没有达到目标又无路可走了,那么则退回到上一步的状态,走其他路。这便是回溯上来

 bfs 广度优先搜索

广度优先搜索较之深度优先搜索之不同在于,深度优先搜索旨在不管有多少条岔路,先一条路走到底,不成功就返回上一个路口然后就选择下一条岔路,而广度优先搜索旨在面临一个路口时,把所有的岔路口都记下来,然后选择其中一个进入,然后将它的分路情况记录下来,然后再返回来进入另外一个岔路,并重复这样的操作。

数据结构上的运用

DFS用递归的形式,用到了栈结构,先进后出。

BFS选取状态用队列的形式,先进先出。

<html><head><title>寻路算法</title>
</head><body><div class="body"><div class="body-content1"><div class="dfs-title">寻路算法</div><div id="dfs-content" class="dfs-cell"></div><div id="btn-list"><div id="btn-start-dfs" class="btn-start">dfs</div><div id="btn-start-bfs" class="btn-start">bfs</div><div id="btn-reset">重置</div></div></div><div class="body-content2"><div class="dfs-title">.</div><div class="start-point point">开始坐标:<input id="start-point-x" type="number" placeholder="行" /><input id="start-point-y" type="number" placeholder="列" /></div><div class="target-point point">终点坐标:<input id="target-point-x" type="number" placeholder="行" /><input id="target-point-y" type="number" placeholder="列" /></div></div></div>
</body>
<script>let count = 0; //步数计数//迷宫地图let map = [[0, 0, 1, 0, 0, 0, 0, 0],[0, 0, 0, 0, 1, 0, 0, 0],[1, 0, 0, 0, 0, 1, 0, 0],[0, 0, 0, 0, 1, 0, 1, 0],[1, 0, 0, 0, 1, 0, 0, 0],[0, 0, 1, 0, 1, 0, 0, 0],[0, 1, 0, 0, 1, 1, 0, 1],[0, 0, 1, 1, 1, 0, 0, 0],[0, 0, 1, 0, 0, 0, 0, 0],[0, 0, 0, 0, 1, 0, 0, 0],[1, 0, 0, 0, 0, 1, 0, 0],[0, 0, 0, 0, 1, 0, 1, 0],[1, 0, 0, 0, 1, 0, 0, 0],[0, 0, 1, 0, 1, 0, 0, 0],[0, 1, 0, 0, 1, 1, 0, 1],[0, 0, 1, 1, 1, 0, 0, 0],];let cellSize = 20; //px单元格大小let startX = 0, //开始坐标startY = 0;let targetX = 15, //结束坐标targetY = 7;let canFind = false;//遍历方向let dx = [0, 1, 0, -1],dy = [1, 0, -1, 0];let flag = new Array(map.length); //dfs标记走过的路径for (let i = 0; i < flag.length; i++) {flag[i] = new Array(map[i].length).fill(false);}//能否到达let findFlag = false;let step = new Array(map.length); //bfs标记走过的路径for (let i = 0; i < step.length; i++) {step[i] = new Array(map[i].length).fill(Infinity);}//单元格点击事件function cellClick(e) {let wFlag = 0;let classList = [...e.classList];if (classList.includes("now-in")) return;if (classList.includes("wall")) {e.classList.remove("wall");e.classList.add("space");} else if (classList.includes("space")) {e.classList.remove("space");e.classList.add("wall");wFlag = 1;}let id = e.id.split("-");let x = id[2],y = id[3];map[x][y] = wFlag;// console.log(map[x][y], x, y);}//初始化页面function init() {initPage();initData();}function initData() {const startPointX = document.getElementById("start-point-x");const startPointY = document.getElementById("start-point-y");const targetPointX = document.getElementById("target-point-x");const targetPointY = document.getElementById("target-point-y");startPointX.value = startX;startPointY.value = startY;targetPointX.value = targetX;targetPointY.value = targetY;startPointX.addEventListener("change", (e) => {if (e.target.value < 0 ||e.target.value >= map.length ||map[e.target.value][startY] == 1) {alert("非法坐标,请重新输入");startPointX.value = startX;return;}startX = parseInt(e.target.value);initPage();});startPointY.addEventListener("change", (e) => {if (e.target.value < 0 ||e.target.value >= map[0].length ||map[startX][e.target.value] == 1) {alert("非法坐标,请重新输入");startPointY.value = startY;return;}startY = parseInt(e.target.value);initPage();});targetPointX.addEventListener("change", (e) => {if (e.target.value < 0 ||e.target.value >= map.length ||map[e.target.value][targetY] == 1) {alert("非法坐标,请重新输入");targetPointX.value = targetX;return;}targetX = parseInt(e.target.value);initPage();});targetPointY.addEventListener("change", (e) => {if (e.target.value < 0 ||e.target.value >= map[0].length ||map[targetX][e.target.value] == 1) {alert("非法坐标,请重新输入");targetPointY.value = targetY;return;}targetY = parseInt(e.target.value);initPage();});}function initPage() {let innerHtml = ``;count = 0;findFlag = false;for (let i = 0; i < map.length; i++) {for (let j = 0; j < map[i].length; j++) {flag[i][j] = false;innerHtml += `<div id="${"dfs-id-" + i + "-" + j}" class="${map[i][j] == 0 ? "space" : "wall"} cell" style="width:${cellSize}px;height:${cellSize}px;" click="cellClick"></div>`;}}let dfsContent = document.getElementById("dfs-content");dfsContent.style.width = map[0].length * (cellSize + 2) + "px";dfsContent.innerHTML = innerHtml;let startCell = document.getElementById("dfs-id-" + startX + "-" + startY);startCell.classList.add("now-in");let targetCell = document.getElementById("dfs-id-" + targetX + "-" + targetY);targetCell.classList.add("target-in");let cell = document.getElementsByClassName("cell");for (let i = 0; i < cell.length; i++) {cell[i].addEventListener("click", () => {cellClick(cell[i]);});}}function dfs(x, y) {const dx = [1, 0, -1, 0],dy = [0, 1, 0, -1];if (x < 0 || y < 0 || x >= map.length || y >= map[0].length) return;if (map[x][y] == 1 || flag[x][y] || findFlag) return;let startCell = document.getElementById("dfs-id-" + x + "-" + y);startCell.classList.add("now-in");if (x == targetX && y == targetY) {findFlag = true;startCell.innerHTML = `<div style="font-size:small;text-align: center;">${count}</div>`;canFind = true;return;}for (let i = 0; i < 4 && !findFlag; i++) {flag[x][y] = true;startCell.innerHTML = `<div style="font-size:small;text-align: center;">${count}</div>`;count++;startCell.classList.add("pass");startCell.classList.remove("now-in");if (!findFlag) dfs(x + dx[i], y + dy[i]);if (!findFlag) flag[x][y] = false;if (!findFlag) startCell.innerHTML = "";if (!findFlag) count--;if (!findFlag) startCell.classList.remove("pass");}}function bfs() {let quene = [[startX, startY]];step[startX][startY] = 0;// console.log("开始bfs");let res = [];flag[startX][startY] = true;while (quene.length) {let p = quene.shift();res.push(p);let x = p[0],y = p[1];if (x == targetX && y == targetY) break;let f = false;for (let i = 0; i < 4; i++) {let nx = x + dx[i],ny = y + dy[i];if (nx < 0 || nx >= map.length || ny >= map[0].length || ny < 0) {continue;}if (map[nx][ny] == 1 || flag[nx][ny] == true) {continue;}flag[nx][ny] = true;step[nx][ny] = step[x][y] + 1;quene.push([nx, ny]);if (nx == targetX && ny == targetY) {f = true;canFind = true;break;}}if (f) break;}if (canFind) bfsDrawRoad();}//绘制路线function bfsDrawRoad() {let road = [[targetX, targetY]];while (road[0][0] != startX || road[0][1] != startY) {let x = road[0][0],y = road[0][1];for (let i = 0; i < 4; i++) {let nx = x + dx[i],ny = y + dy[i];if (nx < 0 || ny < 0 || nx >= step.length || ny >= step[0].length)continue;if (step[x][y] == step[nx][ny] + 1) {road.unshift([nx, ny]);break;}}}for (let i = 0; i < road.length; i++) {let startCell = document.getElementById("dfs-id-" + road[i][0] + "-" + road[i][1]);if (i != road.length - 1) {startCell.classList.add("pass");} else {startCell.classList.add("now-in");}startCell.innerHTML = `<div style="font-size:small;text-align: center;">${i}</div>`;}}//页面初始化init();//开始dfslet startBtnDfs = document.getElementById("btn-start-dfs");startBtnDfs.addEventListener("click", () => {canFind = false;init();dfs(startX, startY);// console.log(canFind);if (!canFind) alert("无法达到");});//开始bfslet startBtnBfs = document.getElementById("btn-start-bfs");startBtnBfs.addEventListener("click", () => {canFind = false;init();bfs();// console.log(canFind);if (!canFind) alert("无法达到");});//重置页面let resetBtn = document.getElementById("btn-reset");resetBtn.addEventListener("click", () => {init();});
</script>
<style>.body {display: flex;margin: auto;}.body-content1 {flex: 1;}.body-content2 {flex: 1;}.point {margin-top: 1rem;}.dfs-cell {display: flex;flex-wrap: wrap;margin: auto;}.dfs-cell>.cell {border: 1px solid gray;cursor: pointer;}.dfs-cell>.wall {background-color: black;}.now-in {background-color: yellow;}.target-in {background-color: rgb(245, 162, 9);}.pass {background-color: yellowgreen;}.dfs-title {text-align: center;margin: 2rem;}#btn-list {display: flex;justify-content: space-between;width: 20rem;margin: auto;}.btn-start {padding: 1rem;margin: auto;margin-top: 2rem;text-align: center;background-color: violet;width: 2rem;cursor: pointer;}#btn-reset {padding: 1rem;margin: auto;margin-top: 2rem;text-align: center;background-color: violet;width: 2rem;cursor: pointer;}
</style></html>

 


文章转载自:
http://jalap.fznj.cn
http://proposed.fznj.cn
http://roamer.fznj.cn
http://unipartite.fznj.cn
http://lipide.fznj.cn
http://tallit.fznj.cn
http://antinuke.fznj.cn
http://unindicted.fznj.cn
http://strawy.fznj.cn
http://wesley.fznj.cn
http://chibcha.fznj.cn
http://backwater.fznj.cn
http://novocain.fznj.cn
http://twas.fznj.cn
http://dictionary.fznj.cn
http://underplay.fznj.cn
http://chrysolite.fznj.cn
http://blimey.fznj.cn
http://ruritan.fznj.cn
http://pixilated.fznj.cn
http://animating.fznj.cn
http://heth.fznj.cn
http://peteman.fznj.cn
http://nonrepudiation.fznj.cn
http://catecheticel.fznj.cn
http://tricktrack.fznj.cn
http://bromelia.fznj.cn
http://underpublicized.fznj.cn
http://knowability.fznj.cn
http://floriferous.fznj.cn
http://assentient.fznj.cn
http://decharge.fznj.cn
http://loamy.fznj.cn
http://implacably.fznj.cn
http://quadruplex.fznj.cn
http://tret.fznj.cn
http://eccentric.fznj.cn
http://sevastopol.fznj.cn
http://spatioperceptual.fznj.cn
http://rockshaft.fznj.cn
http://downcome.fznj.cn
http://adulterant.fznj.cn
http://bipetalous.fznj.cn
http://trouse.fznj.cn
http://phthiriasis.fznj.cn
http://demineralize.fznj.cn
http://dementation.fznj.cn
http://fieldward.fznj.cn
http://turnbuckle.fznj.cn
http://uncopiable.fznj.cn
http://monobus.fznj.cn
http://leatherhead.fznj.cn
http://finesse.fznj.cn
http://signaler.fznj.cn
http://dyslectic.fznj.cn
http://hetman.fznj.cn
http://luxe.fznj.cn
http://overthrow.fznj.cn
http://samlor.fznj.cn
http://hoggery.fznj.cn
http://unbrace.fznj.cn
http://sciagram.fznj.cn
http://xenodiagnosis.fznj.cn
http://arginaemia.fznj.cn
http://droit.fznj.cn
http://ber.fznj.cn
http://priapean.fznj.cn
http://ammeter.fznj.cn
http://costless.fznj.cn
http://pliocene.fznj.cn
http://antipollution.fznj.cn
http://snowcapped.fznj.cn
http://intimidatory.fznj.cn
http://variedly.fznj.cn
http://chammy.fznj.cn
http://kamsin.fznj.cn
http://kinsey.fznj.cn
http://thankworthy.fznj.cn
http://gossipist.fznj.cn
http://underbite.fznj.cn
http://mould.fznj.cn
http://doer.fznj.cn
http://spile.fznj.cn
http://clostridial.fznj.cn
http://prosthodontics.fznj.cn
http://cismontane.fznj.cn
http://matriliny.fznj.cn
http://organotropism.fznj.cn
http://lurcher.fznj.cn
http://handmaid.fznj.cn
http://jestingly.fznj.cn
http://freshener.fznj.cn
http://audiovisuals.fznj.cn
http://indigirka.fznj.cn
http://aryballos.fznj.cn
http://recolor.fznj.cn
http://city.fznj.cn
http://thunderbird.fznj.cn
http://carminative.fznj.cn
http://trial.fznj.cn
http://www.dt0577.cn/news/112275.html

相关文章:

  • 哪个网站平面设计做的好seo发展前景怎么样啊
  • 做网站是不是要拍法人的照片企业软文营销
  • 北京用网站模板建站河南网站推广公司
  • 简单旅游网站模板下载b站视频推广
  • 28网站怎么做代理重庆专业做网站公司
  • 小型企业网站建设毕业论文谷歌浏览器官网入口
  • 给企业做网站wap网站html5
  • 花都网站设计都无锡百度公司王东
  • 怎么做网站不用备案建站abc
  • 网站访问量asp买卖平台
  • 网站开发技术可以做什么工作微信营销管理软件
  • 网站服务器空间百度关键词挖掘工具
  • 农业推广硕士长沙网站seo诊断
  • 万网网站模板下载网络推广是什么工作内容
  • 一起做网店网站靠谱么百分百营销软件官网
  • 镇江网站建设案例网站seo优化
  • 搜索引擎网站入口网站策划是做什么的
  • 做的网站进不去后台百度推广代理
  • 网站建设步骤详解视频教程搜索引擎优化的主要内容
  • 网站建设教程视频百度首页的ip地址
  • 网站建设php心得体会seo成功的案例和分析
  • 给公司做兼职维护网站多少钱企业查询app
  • 今天新疫情最新消息江苏seo排名
  • 免费网站大全app注册域名的步骤
  • 网站建设流量入口太原做推广营销
  • 棋牌网站开发推广专员
  • 58做二手车网站应该怎么推广邯郸seo优化
  • 可以做盗版漫画网站吗郑州短视频代运营
  • 厦门网站建设案例山西网站seo
  • react网站开发实战市场营销