1 Star 0 Fork 0

Hisami / Hisami

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
index.html 138.62 KB
一键复制 编辑 原始数据 按行查看 历史
Hisami 提交于 2021-01-15 01:41 . Site updated: 2021-01-15 01:41:06
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="format-detection" content="telephone=no"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="black"><link rel="icon" href="/images/icons/favicon-egg-16x16.png?v=2.3.0" type="image/png" sizes="16x16"><link rel="icon" href="/images/icons/favicon-egg-32x32.png?v=2.3.0" type="image/png" sizes="32x32"><meta property="og:type" content="website">
<meta property="og:title" content="Hisamiのblog">
<meta property="og:url" content="https://hisami.gitee.io/index.html">
<meta property="og:site_name" content="Hisamiのblog">
<meta property="og:locale" content="zh_CN">
<meta property="article:author" content="Hisami">
<meta name="twitter:card" content="summary"><title>Hisamiのblog</title><link ref="canonical" href="https://hisami.gitee.io/index.html"><link rel="dns-prefetch" href="https://cdn.jsdelivr.net"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.12.1/css/all.min.css" type="text/css"><link rel="stylesheet" href="/css/index.css?v=2.3.0"><script>var Stun = window.Stun || {};
var CONFIG = {
root: '/',
algolia: undefined,
assistSearch: undefined,
fontIcon: {"prompt":{"success":"fas fa-check-circle","info":"fas fa-arrow-circle-right","warning":"fas fa-exclamation-circle","error":"fas fa-times-circle"},"copyBtn":"fas fa-copy"},
sidebar: {"offsetTop":"20px","tocMaxDepth":6},
header: {"enable":true,"showOnPost":true,"scrollDownIcon":true},
postWidget: {"endText":true},
nightMode: {"enable":true},
back2top: {"enable":true},
codeblock: {"style":"default","highlight":"light","wordWrap":false},
reward: false,
fancybox: false,
zoomImage: {"gapAside":"20px"},
galleryWaterfall: undefined,
lazyload: false,
pjax: {"avoidBanner":false},
externalLink: {"icon":{"enable":true,"name":"fas fa-external-link-alt"}},
shortcuts: undefined,
prompt: {"copyButton":"复制","copySuccess":"复制成功","copyError":"复制失败"},
sourcePath: {"js":"js","css":"css","images":"images"},
};
window.CONFIG = CONFIG;</script><meta name="generator" content="Hexo 5.2.0"><link rel="alternate" href="/atom.xml" title="Hisamiのblog" type="application/atom+xml">
</head><body><div class="container" id="container"><header class="header" id="header"><div class="header-inner"><nav class="header-nav header-nav--fixed"><div class="header-nav-inner"><div class="header-nav-menubtn"><i class="fas fa-bars"></i></div><div class="header-nav-menu"><div class="header-nav-menu-item"><a class="header-nav-menu-item__link" href="/"><span class="header-nav-menu-item__icon"><i class="fas fa-home"></i></span><span class="header-nav-menu-item__text">首页</span></a></div><div class="header-nav-menu-item"><a class="header-nav-menu-item__link" href="/archives/"><span class="header-nav-menu-item__icon"><i class="fas fa-folder-open"></i></span><span class="header-nav-menu-item__text">归档</span></a></div><div class="header-nav-menu-item"><a class="header-nav-menu-item__link" href="/categories/"><span class="header-nav-menu-item__icon"><i class="fas fa-layer-group"></i></span><span class="header-nav-menu-item__text">分类</span></a></div><div class="header-nav-menu-item"><a class="header-nav-menu-item__link" href="/tags/"><span class="header-nav-menu-item__icon"><i class="fas fa-tags"></i></span><span class="header-nav-menu-item__text">标签</span></a></div></div><div class="header-nav-search"><span class="header-nav-search__icon"><i class="fas fa-search"></i></span><span class="header-nav-search__text">搜索</span></div><div class="header-nav-mode"><div class="mode"><div class="mode-track"><span class="mode-track-moon"></span><span class="mode-track-sun"></span></div><div class="mode-thumb"></div></div></div></div></nav><div class="header-banner"><div class="header-banner-info"><div class="header-banner-info__title">Hisamiのblog</div><div class="header-banner-info__subtitle">Hisami</div></div><div class="header-banner-arrow"><div class="header-banner-arrow__icon"><i class="fas fa-angle-down"></i></div></div></div></div></header><main class="main" id="main"><div class="main-inner"><div class="content-wrap" id="content-wrap"><div class="content content-home" id="content"><section class="postlist"><article class="postlist-item post"><header class="post-header"><h1 class="post-title"><a class="post-title__link" href="/2020/12/07/%E6%99%AF%E5%8C%BA%E5%AF%BC%E8%88%AA%E7%B3%BB%E7%BB%9F/">景区导航系统</a></h1><div class="post-meta"><span class="post-meta-item post-meta-item--createtime"><span class="post-meta-item__icon"><i class="far fa-calendar-plus"></i></span><span class="post-meta-item__info">发表于</span><span class="post-meta-item__value">2020-12-07</span></span><span class="post-meta-item post-meta-item--updatetime"><span class="post-meta-item__icon"><i class="far fa-calendar-check"></i></span><span class="post-meta-item__info">更新于</span><span class="post-meta-item__value">2020-12-12</span></span></div></header><div class="post-body"><div class="post-excerpt">
<h1 id="Graph-py" >
<a href="#Graph-py" class="heading-link"><i class="fas fa-link"></i></a>Graph.py</h1>
<figure class="highlight python"><div class="table-container"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br><span class="line">329</span><br><span class="line">330</span><br><span class="line">331</span><br><span class="line">332</span><br><span class="line">333</span><br><span class="line">334</span><br><span class="line">335</span><br><span class="line">336</span><br><span class="line">337</span><br><span class="line">338</span><br><span class="line">339</span><br><span class="line">340</span><br><span class="line">341</span><br><span class="line">342</span><br><span class="line">343</span><br><span class="line">344</span><br><span class="line">345</span><br><span class="line">346</span><br><span class="line">347</span><br><span class="line">348</span><br><span class="line">349</span><br><span class="line">350</span><br><span class="line">351</span><br><span class="line">352</span><br><span class="line">353</span><br><span class="line">354</span><br><span class="line">355</span><br><span class="line">356</span><br><span class="line">357</span><br><span class="line">358</span><br><span class="line">359</span><br><span class="line">360</span><br><span class="line">361</span><br><span class="line">362</span><br><span class="line">363</span><br><span class="line">364</span><br><span class="line">365</span><br><span class="line">366</span><br><span class="line">367</span><br><span class="line">368</span><br><span class="line">369</span><br><span class="line">370</span><br><span class="line">371</span><br><span class="line">372</span><br><span class="line">373</span><br><span class="line">374</span><br><span class="line">375</span><br><span class="line">376</span><br><span class="line">377</span><br><span class="line">378</span><br><span class="line">379</span><br><span class="line">380</span><br><span class="line">381</span><br><span class="line">382</span><br><span class="line">383</span><br><span class="line">384</span><br><span class="line">385</span><br><span class="line">386</span><br><span class="line">387</span><br><span class="line">388</span><br><span class="line">389</span><br><span class="line">390</span><br><span class="line">391</span><br><span class="line">392</span><br><span class="line">393</span><br><span class="line">394</span><br><span class="line">395</span><br><span class="line">396</span><br><span class="line">397</span><br><span class="line">398</span><br><span class="line">399</span><br><span class="line">400</span><br><span class="line">401</span><br><span class="line">402</span><br><span class="line">403</span><br><span class="line">404</span><br><span class="line">405</span><br><span class="line">406</span><br><span class="line">407</span><br><span class="line">408</span><br><span class="line">409</span><br><span class="line">410</span><br><span class="line">411</span><br><span class="line">412</span><br><span class="line">413</span><br><span class="line">414</span><br><span class="line">415</span><br><span class="line">416</span><br><span class="line">417</span><br><span class="line">418</span><br><span class="line">419</span><br><span class="line">420</span><br><span class="line">421</span><br><span class="line">422</span><br><span class="line">423</span><br><span class="line">424</span><br><span class="line">425</span><br><span class="line">426</span><br><span class="line">427</span><br><span class="line">428</span><br><span class="line">429</span><br><span class="line">430</span><br><span class="line">431</span><br><span class="line">432</span><br><span class="line">433</span><br><span class="line">434</span><br><span class="line">435</span><br><span class="line">436</span><br><span class="line">437</span><br><span class="line">438</span><br><span class="line">439</span><br><span class="line">440</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> math</span><br><span class="line"><span class="keyword">import</span> matplotlib.pyplot <span class="keyword">as</span> plt</span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Node</span>(<span class="params"><span class="built_in">object</span></span>):</span> <span class="comment"># 景点</span></span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">__init__</span>(<span class="params">self, data, x, y, name, intro, <span class="built_in">next</span> = <span class="literal">None</span></span>):</span></span><br><span class="line"> self.data = data <span class="comment"># 编号</span></span><br><span class="line"> self.name = name <span class="comment"># 名称</span></span><br><span class="line"> self.x = x <span class="comment"># 横坐标</span></span><br><span class="line"> self.y = y <span class="comment"># 纵坐标</span></span><br><span class="line"> self.intro = intro <span class="comment"># 简介</span></span><br><span class="line"> self.<span class="built_in">next</span> = <span class="built_in">next</span> <span class="comment"># 指向下一个结点</span></span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">ChainTable</span>(<span class="params"><span class="built_in">object</span></span>):</span></span><br><span class="line"></span><br><span class="line"> adj = [[<span class="built_in">float</span>(<span class="string">&quot;inf&quot;</span>) <span class="keyword">for</span> x <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">41</span>)] <span class="keyword">for</span> y <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">41</span>)] <span class="comment"># 邻接矩阵</span></span><br><span class="line"> dis = [[<span class="built_in">float</span>(<span class="string">&quot;inf&quot;</span>) <span class="keyword">for</span> z <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">41</span>)] <span class="keyword">for</span> w <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">41</span>)] <span class="comment"># 邻接矩阵</span></span><br><span class="line"> path = [[-<span class="number">1</span> <span class="keyword">for</span> p <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">41</span>)] <span class="keyword">for</span> q <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">41</span>)] <span class="comment"># 邻接矩阵</span></span><br><span class="line"> pathStr = <span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">__init__</span>(<span class="params">self</span>):</span></span><br><span class="line"> self.head = <span class="literal">None</span></span><br><span class="line"> self.length = <span class="number">0</span></span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">getScenic</span>(<span class="params">self</span>):</span></span><br><span class="line"> self.getMap()</span><br><span class="line"> self.getEdge()</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">getMap</span>(<span class="params">self</span>):</span> <span class="comment"># 从文件读取景点信息,一次性操作</span></span><br><span class="line"> spotfile = <span class="built_in">open</span>(<span class="string">&quot;./ScenicInfo/spot.txt&quot;</span>,encoding=<span class="string">&#x27;utf-8&#x27;</span>) <span class="comment"># 打开景点文件</span></span><br><span class="line"> <span class="keyword">for</span> line <span class="keyword">in</span> spotfile.readlines():</span><br><span class="line"> curLine = line.strip().split(<span class="string">&quot; &quot;</span>)</span><br><span class="line"> data = curLine[<span class="number">0</span>]</span><br><span class="line"> x = curLine[<span class="number">1</span>]</span><br><span class="line"> y = curLine[<span class="number">2</span>]</span><br><span class="line"> name = curLine[<span class="number">3</span>]</span><br><span class="line"> intro = curLine[<span class="number">4</span>]</span><br><span class="line"> self.append(Node(data, x, y, name, intro))</span><br><span class="line"> spotfile.close()</span><br><span class="line"> <span class="keyword">return</span></span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">getEdge</span>(<span class="params">self</span>):</span></span><br><span class="line"> edgefile = <span class="built_in">open</span>(<span class="string">&quot;./ScenicInfo/edge.txt&quot;</span>,encoding=<span class="string">&#x27;utf-8&#x27;</span>) <span class="comment"># 打开边文件</span></span><br><span class="line"> i = <span class="number">0</span></span><br><span class="line"> <span class="keyword">for</span> line <span class="keyword">in</span> edgefile.readlines():</span><br><span class="line"> curLine = line.strip().split(<span class="string">&quot; &quot;</span>)</span><br><span class="line"> i += <span class="number">1</span></span><br><span class="line"> <span class="keyword">for</span> j <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, self.length + <span class="number">1</span>):</span><br><span class="line"> <span class="keyword">if</span> curLine[j-<span class="number">1</span>].isdigit():</span><br><span class="line"> self.adj[i][j] = <span class="built_in">int</span>(curLine[j-<span class="number">1</span>])</span><br><span class="line"> <span class="keyword">if</span> curLine[j-<span class="number">1</span>] == <span class="string">&quot;inf&quot;</span>:</span><br><span class="line"> self.adj[i][j] = <span class="built_in">float</span>(<span class="string">&quot;inf&quot;</span>)</span><br><span class="line"> edgefile.close()</span><br><span class="line"> <span class="keyword">return</span></span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">updateMap</span>(<span class="params">self</span>):</span> <span class="comment"># 更新地图</span></span><br><span class="line"> node = self.head</span><br><span class="line"> <span class="keyword">with</span> <span class="built_in">open</span>(<span class="string">&quot;./ScenicInfo/spot.txt&quot;</span>, <span class="string">&#x27;w&#x27;</span>, encoding=<span class="string">&#x27;utf-8&#x27;</span>) <span class="keyword">as</span> obj: <span class="comment"># 文件覆写模式</span></span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, self.length + <span class="number">1</span>):</span><br><span class="line"> <span class="keyword">if</span> i == <span class="number">1</span>:</span><br><span class="line"> obj.write(<span class="string">&quot;%s %s %s %s %s&quot;</span> % (node.data, node.x, node.y, node.name, node.intro))</span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> obj.write(<span class="string">&quot;\n%s %s %s %s %s&quot;</span> % (node.data, node.x, node.y, node.name, node.intro))</span><br><span class="line"> node = node.<span class="built_in">next</span></span><br><span class="line"> <span class="keyword">return</span></span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">updateEdge</span>(<span class="params">self</span>):</span> <span class="comment"># 更新路径</span></span><br><span class="line"> <span class="keyword">with</span> <span class="built_in">open</span>(<span class="string">&quot;./ScenicInfo/edge.txt&quot;</span>, <span class="string">&#x27;w&#x27;</span>, encoding=<span class="string">&#x27;utf-8&#x27;</span>) <span class="keyword">as</span> obj:</span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, self.length + <span class="number">1</span>):</span><br><span class="line"> <span class="keyword">if</span> i != <span class="number">1</span>:</span><br><span class="line"> obj.write(<span class="string">&quot;\n&quot;</span>)</span><br><span class="line"> <span class="keyword">for</span> j <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, self.length + <span class="number">1</span>):</span><br><span class="line"> obj.write(<span class="string">&quot;%s &quot;</span> % self.adj[i][j])</span><br><span class="line"> <span class="keyword">return</span></span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">append</span>(<span class="params">self, newNode</span>):</span> <span class="comment"># 添加结点到链表</span></span><br><span class="line"> item = newNode</span><br><span class="line"> <span class="keyword">if</span> <span class="keyword">not</span> self.head: <span class="comment"># 如果链表中还没有结点,则添加为头结点</span></span><br><span class="line"> self.head = item</span><br><span class="line"> self.adj[<span class="number">1</span>][<span class="number">1</span>] = <span class="number">0</span></span><br><span class="line"> self.length += <span class="number">1</span></span><br><span class="line"> <span class="keyword">else</span>: <span class="comment"># 如果链表中已有结点,检查新增结点编号及坐标是否重合</span></span><br><span class="line"> node = self.head</span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, self.length+<span class="number">1</span>):</span><br><span class="line"> <span class="keyword">if</span> node.data == item.data:</span><br><span class="line"> print(<span class="string">&quot;编号已存在!&quot;</span>)</span><br><span class="line"> <span class="keyword">return</span></span><br><span class="line"> <span class="keyword">if</span> node.x == item.x <span class="keyword">and</span> node.y == item.y:</span><br><span class="line"> print(<span class="string">&quot;坐标已存在!&quot;</span>)</span><br><span class="line"> <span class="keyword">return</span></span><br><span class="line"> <span class="keyword">if</span> i != self.length:</span><br><span class="line"> node = node.<span class="built_in">next</span></span><br><span class="line"> node.<span class="built_in">next</span> = item</span><br><span class="line"> self.adj[i+<span class="number">1</span>][i+<span class="number">1</span>] = <span class="number">0</span></span><br><span class="line"> self.length += <span class="number">1</span></span><br><span class="line"> self.updateMap()</span><br><span class="line"> <span class="keyword">return</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">append2</span>(<span class="params">self, newNode</span>):</span> <span class="comment"># 添加结点到链表</span></span><br><span class="line"> item = newNode</span><br><span class="line"> error = <span class="number">0</span></span><br><span class="line"> <span class="keyword">if</span> <span class="keyword">not</span> self.head: <span class="comment"># 如果链表中还没有结点,则添加为头结点</span></span><br><span class="line"> self.head = item</span><br><span class="line"> self.adj[<span class="number">1</span>][<span class="number">1</span>] = <span class="number">0</span></span><br><span class="line"> self.length += <span class="number">1</span></span><br><span class="line"> <span class="keyword">else</span>: <span class="comment"># 如果链表中已有结点,检查新增结点编号及坐标是否重合</span></span><br><span class="line"> node = self.head</span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, self.length+<span class="number">1</span>):</span><br><span class="line"> <span class="keyword">if</span> node.data == item.data:</span><br><span class="line"> error = <span class="number">1</span></span><br><span class="line"> <span class="keyword">return</span> error</span><br><span class="line"> <span class="keyword">if</span> node.x == item.x <span class="keyword">and</span> node.y == item.y:</span><br><span class="line"> error = <span class="number">2</span></span><br><span class="line"> <span class="keyword">return</span> error</span><br><span class="line"> <span class="keyword">if</span> i != self.length:</span><br><span class="line"> node = node.<span class="built_in">next</span></span><br><span class="line"> node.<span class="built_in">next</span> = item</span><br><span class="line"> self.adj[i+<span class="number">1</span>][i+<span class="number">1</span>] = <span class="number">0</span></span><br><span class="line"> self.length += <span class="number">1</span></span><br><span class="line"> self.updateMap()</span><br><span class="line"> <span class="keyword">return</span> error</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">delete</span>(<span class="params">self, data</span>):</span> <span class="comment"># 从链表删除结点</span></span><br><span class="line"> node = self.head</span><br><span class="line"> prev = self.head <span class="comment"># 前驱结点</span></span><br><span class="line"> flag = <span class="number">0</span></span><br><span class="line"> <span class="keyword">for</span> j <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, self.length + <span class="number">1</span>):</span><br><span class="line"> <span class="keyword">if</span> node.data == data: <span class="comment"># 找到编号为data的结点</span></span><br><span class="line"> flag = <span class="number">1</span></span><br><span class="line"> <span class="keyword">if</span> j == <span class="number">1</span>: <span class="comment"># 如果是头结点</span></span><br><span class="line"> self.head = self.head.<span class="built_in">next</span></span><br><span class="line"> <span class="keyword">else</span>: <span class="comment"># 如果非头结点</span></span><br><span class="line"> prev.<span class="built_in">next</span> = node.<span class="built_in">next</span></span><br><span class="line"> self.removeRoad(j)</span><br><span class="line"> self.length -= <span class="number">1</span></span><br><span class="line"> <span class="keyword">break</span></span><br><span class="line"> prev = node</span><br><span class="line"> node = node.<span class="built_in">next</span></span><br><span class="line"> <span class="keyword">if</span> flag == <span class="number">1</span>:</span><br><span class="line"> self.updateMap()</span><br><span class="line"> self.updateEdge()</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">True</span></span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">False</span></span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">update</span>(<span class="params">self, data, name, x, y, intro</span>):</span></span><br><span class="line"> node = self.head</span><br><span class="line"> flag = <span class="number">0</span></span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, self.length + <span class="number">1</span>):</span><br><span class="line"> <span class="keyword">if</span> node.data != data <span class="keyword">and</span> node.x == x <span class="keyword">and</span> node.y == y:</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">False</span></span><br><span class="line"> node = node.<span class="built_in">next</span></span><br><span class="line"> node = self.head</span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, self.length + <span class="number">1</span>):</span><br><span class="line"> <span class="keyword">if</span> node.data == data:</span><br><span class="line"> flag = <span class="number">1</span></span><br><span class="line"> node.x = x</span><br><span class="line"> node.y = y</span><br><span class="line"> node.name = name</span><br><span class="line"> node.intro = intro</span><br><span class="line"> <span class="comment"># 修改景点间的路长</span></span><br><span class="line"> self.updateRoad(i)</span><br><span class="line"> node = node.<span class="built_in">next</span></span><br><span class="line"> <span class="keyword">if</span> flag == <span class="number">1</span>:</span><br><span class="line"> self.updateMap()</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">True</span></span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">False</span></span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">getInfo</span>(<span class="params">self, data</span>):</span></span><br><span class="line"> node = self.head</span><br><span class="line"> flag = <span class="number">0</span></span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, self.length+<span class="number">1</span>):</span><br><span class="line"> <span class="keyword">if</span> node.data == data:</span><br><span class="line"> flag = <span class="number">1</span></span><br><span class="line"> <span class="keyword">break</span></span><br><span class="line"> node = node.<span class="built_in">next</span></span><br><span class="line"> <span class="keyword">if</span> flag == <span class="number">1</span>:</span><br><span class="line"> x = node.x</span><br><span class="line"> y = node.y</span><br><span class="line"> name = node.name</span><br><span class="line"> intro = node.intro</span><br><span class="line"> <span class="keyword">return</span> x,y,name,intro</span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">False</span></span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">FindKeyword2</span>(<span class="params">self, kw</span>):</span> <span class="comment"># 搜索关键词</span></span><br><span class="line"> keyword = kw</span><br><span class="line"> node = self.head</span><br><span class="line"> flag = <span class="literal">False</span></span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, self.length+<span class="number">1</span>):</span><br><span class="line"> name = node.name</span><br><span class="line"> intro = node.intro</span><br><span class="line"> <span class="keyword">if</span> name.find(keyword) != -<span class="number">1</span> <span class="keyword">or</span> intro.find(keyword) != -<span class="number">1</span>:</span><br><span class="line"> flag = <span class="literal">True</span></span><br><span class="line"> print(<span class="string">&quot;景点编号:%s&quot;</span> % node.data)</span><br><span class="line"> <span class="keyword">if</span> name.find(keyword) != -<span class="number">1</span>:</span><br><span class="line"> print(<span class="string">&quot;名称:%s&quot;</span> % node.name)</span><br><span class="line"> <span class="keyword">if</span> intro.find(keyword) != -<span class="number">1</span>:</span><br><span class="line"> print(<span class="string">&quot;介绍”:%s&quot;</span> % node.intro)</span><br><span class="line"> node = node.<span class="built_in">next</span></span><br><span class="line"> <span class="keyword">if</span> flag == <span class="literal">False</span>:</span><br><span class="line"> print(<span class="string">&quot;搜索结果为空.&quot;</span>)</span><br><span class="line"> <span class="keyword">return</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> <span class="comment"># 对边的操作</span></span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">addRoad2</span>(<span class="params">self, d1, d2</span>):</span> <span class="comment"># 添加路径</span></span><br><span class="line"> data1 = d1</span><br><span class="line"> data2 = d2</span><br><span class="line"> flag1 = <span class="literal">False</span></span><br><span class="line"> flag2 = <span class="literal">False</span></span><br><span class="line"> node1 = self.head</span><br><span class="line"> node2 = self.head</span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, self.length+<span class="number">1</span>):</span><br><span class="line"> <span class="keyword">if</span> node1.data == data1:</span><br><span class="line"> flag1 = <span class="literal">True</span></span><br><span class="line"> <span class="keyword">break</span></span><br><span class="line"> node1 = node1.<span class="built_in">next</span></span><br><span class="line"> <span class="keyword">for</span> j <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, self.length+<span class="number">1</span>):</span><br><span class="line"> <span class="keyword">if</span> node2.data == data2:</span><br><span class="line"> flag2 = <span class="literal">True</span></span><br><span class="line"> <span class="keyword">break</span></span><br><span class="line"> node2 = node2.<span class="built_in">next</span></span><br><span class="line"> <span class="keyword">if</span> flag1==<span class="literal">True</span> <span class="keyword">and</span> flag2==<span class="literal">True</span>:</span><br><span class="line"> self.adj[i][j] = self.pg(node1.x, node1.y, node2.x, node2.y)</span><br><span class="line"> self.adj[j][i] = self.adj[i][j]</span><br><span class="line"> self.updateEdge()</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span></span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> <span class="keyword">if</span> flag1==<span class="literal">False</span>:</span><br><span class="line"> <span class="keyword">return</span> <span class="number">1</span></span><br><span class="line"> <span class="keyword">if</span> flag2==<span class="literal">False</span>:</span><br><span class="line"> <span class="keyword">return</span> <span class="number">2</span></span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">pg</span>(<span class="params">self, x1, y1, x2, y2</span>):</span> <span class="comment"># 勾股定理</span></span><br><span class="line"> intx1 = <span class="built_in">int</span>(x1)</span><br><span class="line"> inty1 = <span class="built_in">int</span>(y1)</span><br><span class="line"> intx2 = <span class="built_in">int</span>(x2)</span><br><span class="line"> inty2 = <span class="built_in">int</span>(y2)</span><br><span class="line"> x = intx1 - intx2</span><br><span class="line"> y = inty1 - inty2</span><br><span class="line"> res = math.sqrt(x**<span class="number">2</span> + y**<span class="number">2</span>)</span><br><span class="line"> <span class="keyword">return</span> <span class="built_in">int</span>(res)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">delRoad2</span>(<span class="params">self,d1,d2</span>):</span> <span class="comment"># 删除路径</span></span><br><span class="line"> data1 = d1</span><br><span class="line"> data2 = d2</span><br><span class="line"> flag1 = <span class="literal">False</span></span><br><span class="line"> flag2 = <span class="literal">False</span></span><br><span class="line"> node1 = self.head</span><br><span class="line"> node2 = self.head</span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, self.length+<span class="number">1</span>):</span><br><span class="line"> <span class="keyword">if</span> node1.data == data1:</span><br><span class="line"> flag1 = <span class="literal">True</span></span><br><span class="line"> <span class="keyword">break</span></span><br><span class="line"> node1 = node1.<span class="built_in">next</span></span><br><span class="line"> <span class="keyword">for</span> j <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, self.length+<span class="number">1</span>):</span><br><span class="line"> <span class="keyword">if</span> node2.data == data2:</span><br><span class="line"> flag2 = <span class="literal">True</span></span><br><span class="line"> <span class="keyword">break</span></span><br><span class="line"> node2 = node2.<span class="built_in">next</span></span><br><span class="line"> <span class="keyword">if</span> flag1==<span class="literal">True</span> <span class="keyword">and</span> flag2==<span class="literal">True</span>:</span><br><span class="line"> self.adj[i][j] = <span class="built_in">float</span>(<span class="string">&quot;inf&quot;</span>)</span><br><span class="line"> self.adj[j][i] = <span class="built_in">float</span>(<span class="string">&quot;inf&quot;</span>)</span><br><span class="line"> self.updateEdge()</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span></span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> <span class="keyword">if</span> flag1==<span class="literal">False</span>:</span><br><span class="line"> <span class="keyword">return</span> <span class="number">1</span></span><br><span class="line"> <span class="keyword">if</span> flag2==<span class="literal">False</span>:</span><br><span class="line"> <span class="keyword">return</span> <span class="number">2</span></span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">removeRoad</span>(<span class="params">self, pos</span>):</span> <span class="comment"># 删除点时更新矩阵</span></span><br><span class="line"> <span class="keyword">while</span> pos &lt; self.length+<span class="number">1</span>:</span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, self.length+<span class="number">1</span>):</span><br><span class="line"> self.adj[i][pos] = self.adj[i][pos+<span class="number">1</span>]</span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, self.length+<span class="number">1</span>):</span><br><span class="line"> self.adj[pos][i] = self.adj[pos+<span class="number">1</span>][i]</span><br><span class="line"> pos += <span class="number">1</span></span><br><span class="line"> <span class="keyword">return</span></span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">updateRoad</span>(<span class="params">self, pos</span>):</span></span><br><span class="line"> pnode = self.head <span class="comment"># 刚修改的点</span></span><br><span class="line"> tnode = self.head <span class="comment"># 连接点</span></span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, pos):</span><br><span class="line"> pnode = pnode.<span class="built_in">next</span></span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, self.length+<span class="number">1</span>):</span><br><span class="line"> <span class="keyword">if</span> self.adj[pos][i] != <span class="number">0</span> <span class="keyword">and</span> self.adj[pos][i] != <span class="built_in">float</span>(<span class="string">&quot;inf&quot;</span>):</span><br><span class="line"> self.adj[pos][i] = self.pg(pnode.x, pnode.y, tnode.x, tnode.y)</span><br><span class="line"> self.adj[i][pos] = self.adj[pos][i]</span><br><span class="line"> tnode = tnode.<span class="built_in">next</span></span><br><span class="line"> self.updateEdge()</span><br><span class="line"> <span class="keyword">return</span></span><br><span class="line"></span><br><span class="line"> <span class="comment"># 找到2点间的路</span></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">bfs</span>(<span class="params">self, s, e</span>):</span> <span class="comment"># 传入起点和终点</span></span><br><span class="line"> </span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">Floyd</span>(<span class="params">self, s, e</span>):</span></span><br><span class="line"> self.pathStr = <span class="string">&quot;&quot;</span></span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, self.length+<span class="number">1</span>):</span><br><span class="line"> <span class="keyword">for</span> j <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, self.length+<span class="number">1</span>):</span><br><span class="line"> self.dis[i][j] = self.adj[i][j]</span><br><span class="line"> <span class="keyword">for</span> k <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, self.length+<span class="number">1</span>): <span class="comment"># 找中转点</span></span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, self.length+<span class="number">1</span>): <span class="comment"># 线段一端</span></span><br><span class="line"> <span class="keyword">for</span> j <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, self.length+<span class="number">1</span>): <span class="comment"># 线段另一端</span></span><br><span class="line"> <span class="keyword">if</span> self.dis[i][j] &gt; self.dis[i][k] + self.dis[k][j]:</span><br><span class="line"> self.dis[i][j] = self.dis[i][k] + self.dis[k][j]</span><br><span class="line"> self.path[i][j] = k</span><br><span class="line"> self.printPath(s, e)</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">getPath</span>(<span class="params">self,s, e</span>):</span></span><br><span class="line"> <span class="keyword">if</span> self.path[s][e] == -<span class="number">1</span>:</span><br><span class="line"> self.pathStr += <span class="string">&quot;-&gt;&quot;</span> + self.getSpotName(e)</span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> self.getPath(s, self.path[s][e])</span><br><span class="line"> self.getPath(self.path[s][e], e)</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">printPath</span>(<span class="params">self, s, e</span>):</span></span><br><span class="line"> <span class="keyword">if</span> self.dis[s][e] == self.adj[s][e] <span class="keyword">and</span> self.adj[s][e] != <span class="built_in">float</span>(<span class="string">&quot;inf&quot;</span>):</span><br><span class="line"> self.pathStr = <span class="string">&quot;最短距离为%s.\nPath:%s-&gt;%s&quot;</span> % (self.dis[s][e], self.getSpotName(s),self.getSpotName(e))</span><br><span class="line"> <span class="keyword">return</span></span><br><span class="line"> <span class="keyword">if</span> self.path[s][e] == -<span class="number">1</span>:</span><br><span class="line"> self.pathStr = <span class="string">&quot;%s到%s没有通路.&quot;</span> % (self.getSpotName(s),self.getSpotName(e))</span><br><span class="line"> <span class="keyword">return</span></span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> self.pathStr += <span class="string">&quot;最短距离为&quot;</span> + <span class="string">&quot;%s&quot;</span> % self.dis[s][e] + <span class="string">&quot;.\n&quot;</span></span><br><span class="line"> self.pathStr += <span class="string">&quot;Path:&quot;</span> + self.getSpotName(s)</span><br><span class="line"> self.getPath(s, e)</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">FindRoad2</span>(<span class="params">self, d1, d2</span>):</span></span><br><span class="line"> data1 = d1</span><br><span class="line"> data2 = d2</span><br><span class="line"> node1 = self.head</span><br><span class="line"> node2 = self.head</span><br><span class="line"> flag1 = <span class="literal">False</span></span><br><span class="line"> flag2 = <span class="literal">False</span></span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, self.length+<span class="number">1</span>):</span><br><span class="line"> <span class="keyword">if</span> node1.data == data1:</span><br><span class="line"> flag1 = <span class="literal">True</span></span><br><span class="line"> <span class="keyword">break</span></span><br><span class="line"> node1 = node1.<span class="built_in">next</span></span><br><span class="line"> <span class="keyword">for</span> j <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, self.length+<span class="number">1</span>):</span><br><span class="line"> <span class="keyword">if</span> node2.data == data2:</span><br><span class="line"> flag2 = <span class="literal">True</span></span><br><span class="line"> <span class="keyword">break</span></span><br><span class="line"> node2 = node2.<span class="built_in">next</span></span><br><span class="line"> <span class="keyword">if</span> flag1==<span class="literal">True</span> <span class="keyword">and</span> flag2==<span class="literal">True</span>:</span><br><span class="line"> self.Floyd(i, j)</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span></span><br><span class="line"> <span class="comment"># if self.Floyd(i, j) == False:</span></span><br><span class="line"> <span class="comment"># return 0</span></span><br><span class="line"> <span class="comment"># else:</span></span><br><span class="line"> <span class="comment"># end, step, visited = self.Dijkstra2(i, j)</span></span><br><span class="line"> <span class="comment"># return end, step, visited</span></span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> <span class="keyword">if</span> flag1 == <span class="literal">False</span>:</span><br><span class="line"> <span class="keyword">return</span> <span class="number">1</span></span><br><span class="line"> <span class="keyword">if</span> flag2 == <span class="literal">False</span>:</span><br><span class="line"> <span class="keyword">return</span> <span class="number">2</span></span><br><span class="line"> <span class="keyword">return</span></span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">Dijkstra2</span>(<span class="params">self, s, e</span>):</span></span><br><span class="line"> vis = [] <span class="comment"># 已访问</span></span><br><span class="line"> unvis = [] <span class="comment"># 未访问</span></span><br><span class="line"> dis = [<span class="built_in">float</span>(<span class="string">&quot;inf&quot;</span>)] <span class="comment"># 记录s到各点的路径长度</span></span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, self.length+<span class="number">1</span>):</span><br><span class="line"> unvis.append(i) <span class="comment"># 所有点加入未访问list</span></span><br><span class="line"> dis.append(self.adj[s][i]) <span class="comment"># s到各个点的边权加入dis_list</span></span><br><span class="line"> cur = s</span><br><span class="line"> <span class="keyword">for</span> j <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, self.length+<span class="number">1</span>): <span class="comment"># 保证每个点都查找过</span></span><br><span class="line"> mindex = <span class="number">0</span> <span class="comment"># dis[mindex] = dis[0] = float(&quot;inf“&quot;)</span></span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, self.length+<span class="number">1</span>):</span><br><span class="line"> <span class="keyword">if</span> self.adj[cur][i] != <span class="number">0</span> <span class="keyword">and</span> self.adj[cur][i] != <span class="built_in">float</span>(<span class="string">&quot;inf&quot;</span>) <span class="keyword">and</span> (i <span class="keyword">in</span> unvis):</span><br><span class="line"> nbr = i</span><br><span class="line"> dis[nbr] = <span class="built_in">min</span>(dis[nbr], dis[cur]+self.adj[cur][i])</span><br><span class="line"> <span class="keyword">if</span> dis[mindex] &gt; dis[nbr]:</span><br><span class="line"> mindex = nbr</span><br><span class="line"> unvis.remove(cur)</span><br><span class="line"> vis.append(cur)</span><br><span class="line"> <span class="keyword">if</span> mindex != <span class="number">0</span>:</span><br><span class="line"> cur = mindex</span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> <span class="keyword">break</span></span><br><span class="line"> <span class="keyword">if</span> dis[e] != <span class="built_in">float</span>(<span class="string">&quot;inf&quot;</span>):</span><br><span class="line"> <span class="keyword">return</span> e, dis[e], vis</span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">False</span></span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">getSpotName</span>(<span class="params">self, index</span>):</span></span><br><span class="line"> node = self.head</span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, index):</span><br><span class="line"> node = node.<span class="built_in">next</span></span><br><span class="line"> <span class="keyword">return</span> node.name</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">getSpotPos</span>(<span class="params">self, index</span>):</span> <span class="comment"># 获取坐标</span></span><br><span class="line"> node = self.head</span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, index):</span><br><span class="line"> node = node.<span class="built_in">next</span></span><br><span class="line"> <span class="keyword">return</span> node.x, node.y</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">def</span> <span class="title">PaintMap</span>(<span class="params">self</span>):</span></span><br><span class="line"> <span class="comment"># plt.style.use(&#x27;dark_background&#x27;)</span></span><br><span class="line"> plt.rcParams[<span class="string">&#x27;font.sans-serif&#x27;</span>] = [<span class="string">&#x27;SimHei&#x27;</span>] <span class="comment"># 解决plt绘图过程中中文无法显示的问题</span></span><br><span class="line"> <span class="comment"># plt.xlim(-1, 20)</span></span><br><span class="line"> <span class="comment"># plt.ylim(0, 30)</span></span><br><span class="line"> plt.axis(<span class="string">&#x27;on&#x27;</span>)</span><br><span class="line"> node = self.head</span><br><span class="line"> x = []</span><br><span class="line"> y = []</span><br><span class="line"> name = []</span><br><span class="line"> x_value = []</span><br><span class="line"> y_value = []</span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, self.length+<span class="number">1</span>):</span><br><span class="line"> x.append(<span class="built_in">int</span>(node.x))</span><br><span class="line"> y.append(<span class="built_in">int</span>(node.y))</span><br><span class="line"> name.append(node.name)</span><br><span class="line"> node = node.<span class="built_in">next</span></span><br><span class="line"> plt.scatter(x, y, s=<span class="number">10</span>, c=<span class="string">&quot;#00FFFF&quot;</span>, alpha=<span class="number">1</span>)</span><br><span class="line"> plt.scatter(x, y, s=<span class="number">60</span>, c=<span class="string">&quot;#FFFF00&quot;</span>, marker=<span class="string">&#x27;o&#x27;</span>, edgecolors=<span class="string">&#x27;g&#x27;</span>)</span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(self.length):</span><br><span class="line"> plt.text(<span class="built_in">int</span>(x[i]), <span class="built_in">int</span>(y[i]), name[i],fontsize=<span class="number">10</span>,color=<span class="string">&quot;#00FFFF&quot;</span>)</span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, self.length+<span class="number">1</span>):</span><br><span class="line"> <span class="keyword">for</span> j <span class="keyword">in</span> <span class="built_in">range</span>(<span class="number">1</span>, self.length+<span class="number">1</span>):</span><br><span class="line"> <span class="keyword">if</span> self.adj[i][j] != <span class="number">0</span> <span class="keyword">and</span> self.adj[i][j] != <span class="built_in">float</span>(<span class="string">&quot;inf&quot;</span>):</span><br><span class="line"> x1, y1 = self.getSpotPos(i)</span><br><span class="line"> x2, y2 = self.getSpotPos(j)</span><br><span class="line"> x_value.append(<span class="built_in">int</span>(x1))</span><br><span class="line"> y_value.append(<span class="built_in">int</span>(y1))</span><br><span class="line"> x_value.append(<span class="built_in">int</span>(x2))</span><br><span class="line"> y_value.append(<span class="built_in">int</span>(y2))</span><br><span class="line"> plt.plot(x_value, y_value,linestyle=<span class="string">&#x27;:&#x27;</span>,linewidth=<span class="number">1</span>,c=<span class="string">&quot;#00BFFF&quot;</span>,alpha=<span class="number">0.5</span>)</span><br><span class="line"> x_value.clear()</span><br><span class="line"> y_value.clear()</span><br></pre></td></tr></table></div></figure>
<h1 id="FindAllRoad-py" >
<a href="#FindAllRoad-py" class="heading-link"><i class="fas fa-link"></i></a>FindAllRoad.py</h1>
<figure class="highlight python"><div class="table-container"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 找到所有从start到end的路径</span></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">findAllPath</span>(<span class="params">graph, start, end, path=<span class="string">&#x27;&#x27;</span></span>):</span></span><br><span class="line"></span><br><span class="line"> path = path + start</span><br><span class="line"> <span class="keyword">if</span> start == end:</span><br><span class="line"> path += <span class="string">&#x27;\n&#x27;</span></span><br><span class="line"> <span class="keyword">return</span> path</span><br><span class="line"></span><br><span class="line"> paths = <span class="string">&#x27;&#x27;</span> <span class="comment"># 存储所有路径</span></span><br><span class="line"> <span class="keyword">for</span> node <span class="keyword">in</span> graph[start]:</span><br><span class="line"> <span class="keyword">if</span> node <span class="keyword">not</span> <span class="keyword">in</span> path:</span><br><span class="line"> newpaths = findAllPath(graph, node, end, path)</span><br><span class="line"> <span class="keyword">for</span> newpath <span class="keyword">in</span> newpaths:</span><br><span class="line"> paths += newpath</span><br><span class="line"> <span class="keyword">return</span> paths</span><br><span class="line"></span><br><span class="line">graph = &#123;<span class="string">&#x27;A&#x27;</span>: [<span class="string">&#x27;B&#x27;</span>, <span class="string">&#x27;C&#x27;</span>, <span class="string">&#x27;D&#x27;</span>],</span><br><span class="line"> <span class="string">&#x27;B&#x27;</span>: [<span class="string">&#x27;A&#x27;</span>, <span class="string">&#x27;D&#x27;</span>, <span class="string">&#x27;E&#x27;</span>],</span><br><span class="line"> <span class="string">&#x27;C&#x27;</span>: [<span class="string">&#x27;A&#x27;</span>, <span class="string">&#x27;D&#x27;</span>, <span class="string">&#x27;F&#x27;</span>],</span><br><span class="line"> <span class="string">&#x27;D&#x27;</span>: [<span class="string">&#x27;A&#x27;</span>, <span class="string">&#x27;B&#x27;</span>, <span class="string">&#x27;C&#x27;</span>, <span class="string">&#x27;E&#x27;</span>, <span class="string">&#x27;F&#x27;</span>, <span class="string">&#x27;G&#x27;</span>],</span><br><span class="line"> <span class="string">&#x27;E&#x27;</span>: [<span class="string">&#x27;B&#x27;</span>, <span class="string">&#x27;D&#x27;</span>, <span class="string">&#x27;G&#x27;</span>],</span><br><span class="line"> <span class="string">&#x27;F&#x27;</span>: [<span class="string">&#x27;C&#x27;</span>, <span class="string">&#x27;D&#x27;</span>, <span class="string">&#x27;G&#x27;</span>],</span><br><span class="line"> <span class="string">&#x27;G&#x27;</span>: [<span class="string">&#x27;D&#x27;</span>, <span class="string">&#x27;E&#x27;</span>, <span class="string">&#x27;F&#x27;</span>]&#125;</span><br><span class="line"></span><br><span class="line">allpath = findAllPath(graph, <span class="string">&#x27;B&#x27;</span>, <span class="string">&#x27;A&#x27;</span>)</span><br><span class="line">print(<span class="string">&#x27;所有路径:\n%s&#x27;</span> % allpath)</span><br></pre></td></tr></table></div></figure></div></div></article><article class="postlist-item post"><header class="post-header"><h1 class="post-title"><a class="post-title__link" href="/2020/10/11/%E8%93%9D%E6%A1%A5%E6%9D%AF%E7%AC%AC%E5%8D%81%E4%B8%80%E5%B1%8A%E7%AC%AC%E4%B8%80%E5%9C%BA%E7%9C%9F%E9%A2%98%E8%A7%A3%E6%9E%90/">蓝桥杯2020省赛第一场</a></h1><div class="post-meta"><span class="post-meta-item post-meta-item--createtime"><span class="post-meta-item__icon"><i class="far fa-calendar-plus"></i></span><span class="post-meta-item__info">发表于</span><span class="post-meta-item__value">2020-10-11</span></span><span class="post-meta-item post-meta-item--updatetime"><span class="post-meta-item__icon"><i class="far fa-calendar-check"></i></span><span class="post-meta-item__info">更新于</span><span class="post-meta-item__value">2020-10-14</span></span></div></header><div class="post-body"><div class="post-excerpt">
<h1 id="D-REPEAT程序" >
<a href="#D-REPEAT程序" class="heading-link"><i class="fas fa-link"></i></a>D REPEAT程序</h1>
<p>【问题描述】</p>
<p>附件 prog.txt 中是一个用某种语言写的程序。</p>
<p>其中 REPEAT <em>k</em> 表示一个次数为 <em>k</em> 的循环。循环控制的范围由缩进表达,</p>
<p>从次行开始连续的缩进比该行多的(前面的空白更长的)为循环包含的内容。</p>
<p>例如如下片段:</p>
<p>REPEAT 2:</p>
<p>A = A + 4</p>
<p>REPEAT 5:</p>
<p>REPEAT 6:</p>
<p>A = A + 5</p>
<p>A = A + 7</p>
<p>A = A + 8</p>
<p>A = A + 9</p>
<p>该片段中从 A = A + 4 所在的行到 A = A + 8 所在的行都在第一行的</p>
<p>循环两次中。</p>
<p>REPEAT 6: 所在的行到 A = A + 7 所在的行都在 REPEAT 5: 循环中。</p>
<p>A = A + 5 实际总共的循环次数是 2 × 5 × 6 = 60 次。</p>
<p>请问该程序执行完毕之后,A 的值是多少?</p>
<p>【答案提交】</p>
<p>这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个</p>
<p>整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。</p>
<p>【思路一】</p>
<figure class="highlight c++"><div class="table-container"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string">&lt;cstdio&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string">&lt;cstring&gt; </span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> mx = <span class="number">100000</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">int</span> a[mx], b[mx]; <span class="comment">//第i层循环的缩进,第i层的循环次数 </span></span><br><span class="line"><span class="keyword">char</span> s[mx];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line"> freopen(<span class="string">&quot;prog.txt&quot;</span>, <span class="string">&quot;r&quot;</span>, <span class="built_in">stdin</span>);</span><br><span class="line"> gets(s);</span><br><span class="line"> <span class="keyword">int</span> pos = <span class="number">0</span>, ans = <span class="number">0</span>, w = <span class="number">1</span>;</span><br><span class="line"> a[<span class="number">0</span>] = <span class="number">-1</span>, b[<span class="number">0</span>] = <span class="number">1</span>; <span class="comment">//a[i]表第i层循环的缩进,b[i]表第i层循环次数 </span></span><br><span class="line"> <span class="keyword">while</span>(gets(s))&#123;</span><br><span class="line"> <span class="keyword">int</span> n = <span class="built_in">strlen</span>(s), p = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span>(s[p] == <span class="string">&#x27; &#x27;</span>) p++;</span><br><span class="line"> <span class="keyword">while</span>(a[pos] &gt;= p) w /= b[pos--];</span><br><span class="line"> <span class="keyword">if</span>(s[n<span class="number">-1</span>] == <span class="string">&#x27;:&#x27;</span>)&#123;</span><br><span class="line"> <span class="keyword">int</span> k = s[n<span class="number">-2</span>]-<span class="string">&#x27;0&#x27;</span>;</span><br><span class="line"> pos = pos+<span class="number">1</span>;</span><br><span class="line"> w *= k;</span><br><span class="line"> a[pos] = p, b[pos] = k;</span><br><span class="line"> &#125;<span class="keyword">else</span>&#123;</span><br><span class="line"> <span class="keyword">int</span> k = s[n<span class="number">-1</span>] - <span class="string">&#x27;0&#x27;</span>;</span><br><span class="line"> ans += k*w;</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>, ans);</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></div></figure>
<p>【思路二】</p>
<p>巧用python。将txt里的”repeat i:”语句全部替换为”for i in range(0, i):”,运行程序得答案</p>
<h1 id="E-矩阵" >
<a href="#E-矩阵" class="heading-link"><i class="fas fa-link"></i></a>E 矩阵</h1>
<p>【问题描述】</p>
<p>把 1 ∼ 2020 放在 2 × 1010 的矩阵里。要求同一行中右边的比左边大,同一</p>
<p>列中下边的比上边的大。一共有多少种方案?</p>
<p>答案很大,你只需要给出方案数除以 2020 的余数即可。</p>
<p>【答案提交】</p>
<p>这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个</p>
<p>整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。</p>
<p>【标签】动态规划</p>
<p>【思路】</p>
<figure class="highlight c++"><div class="table-container"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string">&lt;cstdio&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> mx = <span class="number">2020</span>+<span class="number">5</span>, MOD = <span class="number">2020</span>;</span><br><span class="line"><span class="keyword">int</span> dp[mx][mx]; <span class="comment">//dp[i][j]:目前枚举i个数,j个放在第一行的方案数</span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line"> <span class="keyword">int</span> n = <span class="number">2020</span>;</span><br><span class="line"> dp[<span class="number">1</span>][<span class="number">1</span>] = <span class="number">1</span>; <span class="comment">//数字1必定放在第1行,否则不合法</span></span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i = <span class="number">2</span>; i &lt;= n; i++)&#123;</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> j = <span class="number">1</span>; j &lt;= i; j++)&#123;</span><br><span class="line"> <span class="comment">//i放第一行 </span></span><br><span class="line"> dp[i][j] += dp[i<span class="number">-1</span>][j<span class="number">-1</span>];</span><br><span class="line"> <span class="comment">//i放第二行,需满足放完i之后第一行个数 ≤ 第二行 </span></span><br><span class="line"> <span class="keyword">if</span>(i-j &lt;= j) dp[i][j] += dp[i<span class="number">-1</span>][j];</span><br><span class="line"> dp[i][j] %= MOD; <span class="comment">//计算过程模2020,防止溢出</span></span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>, dp[<span class="number">2020</span>][<span class="number">1010</span>]);</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125; </span><br></pre></td></tr></table></div></figure>
<h1 id="H-走方格" >
<a href="#H-走方格" class="heading-link"><i class="fas fa-link"></i></a>H 走方格</h1>
<p>【问题描述】</p>
<p>在平面上有一些二维的点阵。</p>
<p>这些点的编号就像二维数组的编号一样,从上到下依次为第 1 至第 <em>n</em> 行,</p>
<p>从左到右依次为第 1 至第 <em>m</em> 列,每一个点可以用行号和列号来表示。</p>
<p>现在有个人站在第 1 行第 1 列,要走到第 <em>n</em> 行第 <em>m</em> 列。只能向右或者向下</p>
<p>走。</p>
<p>注意,如果行号和列数都是偶数,不能走入这一格中。</p>
<p>问有多少种方案。</p>
<p>【输入格式】</p>
<p>输入一行包含两个整数 <em>n</em>, <em>m</em></p>
<p>【输出格式】</p>
<p>输出一个整数,表示答案。</p>
<p>【样例输入】</p>
<p>3 4</p>
<p>【样例输出】</p>
<p>2</p>
<p>【样例输入】</p>
<p>6 6</p>
<p>【样例输出】</p>
<p>0</p>
<p>【评测用例规模与约定】</p>
<p>对于所有评测用例,1 ≤ <em>n</em> ≤ 30, 1 ≤ <em>m</em> ≤ 30。</p>
<p>【标签】动态规划</p>
<p>【思路】</p>
<p>求方案数最容易想到深搜,但运行程序后输入较大的数据会发现深搜超时,可以改用动态规划。</p>
<p>由于只能向下或向右走,可知到达i行j列必定是从i-1向下走或从j-1向右走,所以到达i行j列的方案数就是到达i-1行j列的方案数+到达i行j-1列的方案数。</p>
<figure class="highlight c++"><div class="table-container"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string">&lt;cstdio&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> mx = <span class="number">30</span>+<span class="number">5</span>;</span><br><span class="line"><span class="keyword">int</span> dp[mx][mx];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line"> <span class="keyword">int</span> n, m;</span><br><span class="line"> <span class="built_in">scanf</span>(<span class="string">&quot;%d%d&quot;</span>, &amp;n, &amp;m);</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i++)&#123;</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> j = <span class="number">1</span>; j &lt;= m; j++)&#123;</span><br><span class="line"> <span class="keyword">if</span>(i==<span class="number">1</span> || j==<span class="number">1</span>)&#123;</span><br><span class="line"> dp[i][j] = <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">continue</span>;</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="keyword">if</span>(i&amp;<span class="number">1</span> || j&amp;<span class="number">1</span>)&#123; <span class="comment">//x&amp;1若为1,说明是奇数。因为x的二进制最后一位为1 </span></span><br><span class="line"> dp[i][j] = dp[i<span class="number">-1</span>][j] + dp[i][j<span class="number">-1</span>];</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>, dp[n][m]);</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125; </span><br></pre></td></tr></table></div></figure>
<h1 id="J-网络分析" >
<a href="#J-网络分析" class="heading-link"><i class="fas fa-link"></i></a>J 网络分析</h1>
<p>【问题描述】</p>
<p>小明正在做一个网络实验。</p>
<p>他设置了 <em>n</em> 台电脑,称为节点,用于收发和存储数据。</p>
<p>初始时,所有节点都是独立的,不存在任何连接。</p>
<p>小明可以通过网线将两个节点连接起来,连接后两个节点就可以互相通信</p>
<p>了。两个节点如果存在网线连接,称为相邻。</p>
<p>小明有时会测试当时的网络,他会在某个节点发送一条信息,信息会发送</p>
<p>到每个相邻的节点,之后这些节点又会转发到自己相邻的节点,直到所有直接</p>
<p>或间接相邻的节点都收到了信息。所有发送和接收的节点都会将信息存储下来。</p>
<p>一条信息只存储一次。</p>
<p>给出小明连接和测试的过程,请计算出每个节点存储信息的大小。</p>
<p>【输入格式】</p>
<p>输入的第一行包含两个整数 <em>n</em>, <em>m</em>,分别表示节点数量和操作数量。节点从</p>
<p>1 至 <em>n</em> 编号。</p>
<p>接下来 <em>m</em> 行,每行三个整数,表示一个操作。</p>
<p>如果操作为 1 <em>a b*,表示将节点 *a</em> 和节点 <em>b</em> 通过网线连接起来。当 <em>a</em> = <em>b</em></p>
<p>时,表示连接了一个自环,对网络没有实质影响。</p>
<p>如果操作为 2 <em>p t*,表示在节点 *p</em> 上发送一条大小为 t 的信息。</p>
<p>【输出格式】</p>
<p>输出一行,包含 <em>n</em> 个整数,相邻整数之间用一个空格分割,依次表示进行</p>
<p>完上述操作后节点 1 至节点 <em>n</em> 上存储信息的大小。</p>
<p>【样例输入】</p>
<p>4 8</p>
<p>1 1 2</p>
<p>2 1 10</p>
<p>2 3 5</p>
<p>1 4 1</p>
<p>2 2 2</p>
<p>1 1 2</p>
<p>1 2 4</p>
<p>2 2 1</p>
<p>【样例输出】</p>
<p>13 13 5 3</p>
<p>【评测用例规模与约定】</p>
<p>对于 30% 的评测用例,1 ≤ <em>n</em> ≤ 20,1 ≤ <em>m</em> ≤ 100。</p>
<p>对于 50% 的评测用例,1 ≤ <em>n</em> ≤ 100,1 ≤ <em>m</em> ≤ 1000。</p>
<p>对于 70% 的评测用例,1 ≤ <em>n</em> ≤ 1000,1 ≤ <em>m</em> ≤ 10000。</p>
<p>对于所有评测用例,1 ≤ <em>n</em> ≤ 10000,1 ≤ <em>m</em> ≤ 100000,1 ≤ <em>t</em> ≤ 100。</p>
<p>【标签】并查集</p>
<p>【思路】</p>
<p>1、连接x和y:判断被连接的2点是否已属于某一连通块,分4种情况</p>
<p>(1)x和y均未加入连通块:x和y均加入编号为x的连通块</p>
<p>(2)x未加入连通块,y已加入:将x加入y所在连通块</p>
<p>(3)x已加入连通块,y未加入:将y加入x所在连通块</p>
<p>(4)x和y均已加入连通块:合并2个连通块。具体操作:在x和y各自所在的两个连通块中选编号小的连通块,记为tmin,编号大的那个连通块记为tmax。遍历所有站点,其中属于tmax连通块的站点均更新其所在连通块为tmin,达到合并2个连通块的目的</p>
<p>2、从x发送大小为y的信息:x站点首先加上y,然后遍历所有站点,和x属于同一连通块的均加上y</p>
<figure class="highlight c++"><div class="table-container"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string">&lt;cstdio&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string">&lt;queue&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string">&lt;algorithm&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string">&lt;cstring&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> mx = <span class="number">10000</span>+<span class="number">10</span>;</span><br><span class="line"><span class="keyword">int</span> sum[mx], father[mx];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line"> <span class="comment">//输入</span></span><br><span class="line"> <span class="keyword">int</span> n, m;</span><br><span class="line"> <span class="built_in">scanf</span>(<span class="string">&quot;%d%d&quot;</span>, &amp;n, &amp;m);</span><br><span class="line"> <span class="built_in">memset</span>(father, <span class="number">0</span>, <span class="keyword">sizeof</span>(father));</span><br><span class="line"> <span class="built_in">memset</span>(sum, <span class="number">0</span>, <span class="keyword">sizeof</span>(sum));</span><br><span class="line"> <span class="comment">//边输入边操作 </span></span><br><span class="line"> <span class="keyword">while</span>(m--)&#123;</span><br><span class="line"> <span class="keyword">int</span> op, x, y;</span><br><span class="line"> <span class="built_in">scanf</span>(<span class="string">&quot;%d%d%d&quot;</span>, &amp;op,&amp;x,&amp;y); </span><br><span class="line"> <span class="keyword">if</span>(op == <span class="number">1</span>)&#123; <span class="comment">//连接x,y点 </span></span><br><span class="line"> <span class="keyword">if</span>(!father[x] &amp;&amp; !father[y]) father[x] = x, father[y] = father[x];</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(!father[x] &amp;&amp; father[y]) father[x] = father[y];</span><br><span class="line"> <span class="keyword">else</span> <span class="keyword">if</span>(father[x] &amp;&amp; !father[y]) father[y] = father[x];</span><br><span class="line"> <span class="keyword">else</span>&#123;</span><br><span class="line"> <span class="keyword">int</span> tmax = max(father[x], father[y]);</span><br><span class="line"> <span class="keyword">int</span> tmin = min(father[x], father[y]);</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i++)</span><br><span class="line"> <span class="keyword">if</span>(father[i] == tmax) father[i] = tmin;</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;<span class="keyword">else</span>&#123; <span class="comment">//站点x发送大小为y的信息 </span></span><br><span class="line"> <span class="comment">/*</span></span><br><span class="line"><span class="comment"> 下面先把x站点加上y,是因为下面的if语句中&quot;&amp;&amp; father[x]&quot;</span></span><br><span class="line"><span class="comment"> 保证了x绝对属于某一连通块。此处若不先将x自身加上y,</span></span><br><span class="line"><span class="comment"> 当x是一个孤立点、即不属于任一连通块时会导致x没有加上</span></span><br><span class="line"><span class="comment"> y,最终输出x点存储的信息大小时比正确答案小</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"> sum[x] += y;</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i++)</span><br><span class="line"> <span class="comment">//站点x已经加过,因此i==x时不必再加一次 &amp;&amp;</span></span><br><span class="line"> <span class="comment">//i和x属同一连通块 &amp;&amp; father[x]是属于某一连通块的 </span></span><br><span class="line"> <span class="keyword">if</span>(i != x &amp;&amp; father[i] == father[x] &amp;&amp; father[x])</span><br><span class="line"> sum[i] += y;</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="comment">//输出 </span></span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i = <span class="number">1</span>; i &lt;= n; i++)&#123;</span><br><span class="line"> <span class="keyword">if</span>(i != <span class="number">1</span>) <span class="built_in">printf</span>(<span class="string">&quot; &quot;</span>);</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">&quot;%d&quot;</span>, sum[i]);</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>); </span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125; </span><br></pre></td></tr></table></div></figure>
</div></div></article><article class="postlist-item post"><header class="post-header"><h1 class="post-title"><a class="post-title__link" href="/2020/09/26/LeetCode-%E8%B4%AA%E5%BF%83%E7%AE%97%E6%B3%95/">LeetCode-贪心算法</a></h1><div class="post-meta"><span class="post-meta-item post-meta-item--createtime"><span class="post-meta-item__icon"><i class="far fa-calendar-plus"></i></span><span class="post-meta-item__info">发表于</span><span class="post-meta-item__value">2020-09-26</span></span><span class="post-meta-item post-meta-item--updatetime"><span class="post-meta-item__icon"><i class="far fa-calendar-check"></i></span><span class="post-meta-item__info">更新于</span><span class="post-meta-item__value">2020-09-26</span></span></div></header><div class="post-body"><div class="post-excerpt"></div></div></article><article class="postlist-item post"><header class="post-header"><h1 class="post-title"><a class="post-title__link" href="/2020/08/18/%E3%80%8A%E7%AE%97%E6%B3%95%E7%AB%9E%E8%B5%9B%E5%85%A5%E9%97%A8%E7%BB%8F%E5%85%B8%E7%AC%AC2%E7%89%88%E3%80%8B%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/">《算法竞赛入门经典第2版》学习笔记</a></h1><div class="post-meta"><span class="post-meta-item post-meta-item--createtime"><span class="post-meta-item__icon"><i class="far fa-calendar-plus"></i></span><span class="post-meta-item__info">发表于</span><span class="post-meta-item__value">2020-08-18</span></span><span class="post-meta-item post-meta-item--updatetime"><span class="post-meta-item__icon"><i class="far fa-calendar-check"></i></span><span class="post-meta-item__info">更新于</span><span class="post-meta-item__value">2020-10-28</span></span></div></header><div class="post-body"><div class="post-excerpt">
<h1 id="小技巧-细节篇" >
<a href="#小技巧-细节篇" class="heading-link"><i class="fas fa-link"></i></a>小技巧/细节篇</h1>
<p>1.取数值<strong>n的末6位</strong>:可以写成<strong>n % 1e6</strong></p>
<p>2.多组测试数据:while(scanf(“%d”, &amp;n)==1 &amp;&amp; n),表示输入1个变量(这里指n)且n不为0,则进入循环体。若需输入2个变量则修改为while(scanf(“%d %d”, &amp;a, &amp;b)==2 &amp;&amp; (进入循环体的条件))</p>
<p>3.x四舍五入:<strong>floor(x+0.5)</strong></p>
<p>4.do-while循环格式“do{循环体}while(条件);”,其中循环体至少执行一次</p>
<p>5.比较大的数组声明在main函数外,否则可能无法运行</p>
<p>6.输出格式空格问题:除了头一个字符其余字符前面带空格:</p>
<figure class="highlight c++"><div class="table-container"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">for</span>(<span class="keyword">int</span> i = <span class="number">0</span>; i &lt; n; i++)&#123;</span><br><span class="line"> <span class="keyword">if</span>(i &gt; <span class="number">0</span>) <span class="built_in">printf</span>(<span class="string">&quot; &quot;</span>);</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">&quot;%c&quot;</span>, ch);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></div></figure>
<p>7.多利用C++语言的简洁性。比如</p>
<p>①tot和a [0] [n-1]都赋值1,x是行,y是列。可写成”tot = a[x=0] [y=n-1] = 1;”</p>
<p>②行+1的同时tot+1,可写成”a[++x] [y] = ++tot;”</p>
<p>PS:注意前自增<strong>++tot</strong>和后自增<strong>tot++</strong>的区别!</p>
<p>8.scanf输入不包含空格和回车,当输入需要包含空格或回车时采用getchar。用法:</p>
<figure class="highlight c++"><div class="table-container"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">int</span> c; <span class="comment">//注意必须使用int定义字符,避免出错</span></span><br><span class="line">c = getchar();</span><br><span class="line"><span class="comment">//循环读入:</span></span><br><span class="line"><span class="keyword">int</span> c;</span><br><span class="line"><span class="keyword">while</span>( (c = getchar()) != EOF)&#123;</span><br><span class="line"> ... ...</span><br><span class="line">&#125;</span><br></pre></td></tr></table></div></figure>
<p>eg.</p>
<figure class="highlight c++"><div class="table-container"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string">&lt;cstdio&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="keyword">char</span> s[] = <span class="string">&quot;`123456789-=QWERTYUIOPASDFGHJKLZXCVBNM,./&quot;</span>;</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line"> <span class="keyword">int</span> i, c;</span><br><span class="line"> <span class="keyword">while</span>((c = getchar()) != EOF)&#123;</span><br><span class="line"> <span class="keyword">for</span>(i = <span class="number">1</span>; s[i] &amp;&amp; s[i] != c; i++);</span><br><span class="line"> <span class="keyword">if</span>(s[i]) <span class="built_in">putchar</span>(s[i<span class="number">-1</span>]);</span><br><span class="line"> <span class="keyword">else</span> <span class="built_in">putchar</span>(c);</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></div></figure>
<p>PS:调用getchar时,用户输入的字符被暂时存放在键盘缓冲区,直到用户按回车为止(回车字符也放在缓冲区)。键入回车之后,getchar才开始从stdin流中每次读入一个字,每读取一个字符就处理一个字符,再用putchar输出这单个字符。</p>
<p>9.</p>
<h1 id="数组篇" >
<a href="#数组篇" class="heading-link"><i class="fas fa-link"></i></a>数组篇</h1>
<h2 id="通用" >
<a href="#通用" class="heading-link"><i class="fas fa-link"></i></a>通用</h2>
<p>1.从数组a复制k个元素到数组b:memcpy(b, a, sizeof(数组类型)*k),头文件&lt; cstring &gt;</p>
<p>2.定义常量数组无需指明大小,如char[] = “abcd”</p>
<h2 id="整型-bool型" >
<a href="#整型-bool型" class="heading-link"><i class="fas fa-link"></i></a>整型/bool型</h2>
<p>1.数组清零:memset(a, 0, sizeof(a)),头文件&lt; cstring &gt;</p>
<h2 id="字符数组" >
<a href="#字符数组" class="heading-link"><i class="fas fa-link"></i></a>字符数组</h2>
<p>1.用scanf输入字符数组:scanf(“%s”, s),不用加&amp;</p>
<p>2.sprintf:输出到字符数组。用法:将a、b、c变量输出到buf串写作 <strong>sprintf(buf, “%d%d%d”, a, b, c)</strong>,但须保证<strong>buf足够大</strong>,至少是输出字符的个数加1(因为末尾还有看不见的’\0’),才可以容纳输出的信息</p>
<p>3.字符数组的复制:strcpy(a, b)—将b串复制到a串</p>
<p>字符数组的比较:strcmp(a, b)—<strong>a &lt; b返回负数</strong><strong>a == b返回0</strong><strong>a &gt; b返回整数</strong>。PS:比较是自左向右按ASCII码值升序比较</p>
<p>字符数组的连接:strcat(c, d)—在c串后面接上d串</p>
<p>字符数组匹配查找:strchr(s, ‘,’)—在s串查找逗号第一次出现的位置下标</p>
<figure class="highlight c++"><div class="table-container"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string">&lt;cstdio&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string">&lt;cstring&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line"> <span class="keyword">char</span> a[<span class="number">20</span>], b[<span class="number">20</span>];</span><br><span class="line"> <span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>, a);</span><br><span class="line"> <span class="built_in">strcpy</span>(b, a); <span class="comment">//将a复制到b</span></span><br><span class="line"> <span class="keyword">if</span>(<span class="built_in">strcmp</span>(a, b) == <span class="number">0</span>) <span class="built_in">cout</span> &lt;&lt; <span class="string">&quot;Equal.\n&quot;</span>; <span class="comment">//比较a和b</span></span><br><span class="line"> <span class="built_in">strcat</span>(a, b); <span class="comment">//将b接到a后面</span></span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">&quot;%s&quot;</span>, a);</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></div></figure>
<h1 id="文件篇" >
<a href="#文件篇" class="heading-link"><i class="fas fa-link"></i></a>文件篇</h1>
<p>1.文件重定向:将.in文件作为输入,输出到.out文件中。将重定向语句写在#ifdef和#endif中,仅当定义了LOCAL符号,才编译2条freopen语句。将#define LOCAL注释掉,即可变成标准I/O(即键盘输入控制台显示输出结果)PS:编译前将测试数据保存在.in文件。</p>
<p>eg.</p>
<figure class="highlight c++"><div class="table-container"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">define</span> LOCAL</span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string">&lt;cstdio&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> INF 1000000000</span></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line"> <span class="meta">#<span class="meta-keyword">ifdef</span> LOCAL</span></span><br><span class="line"> freopen(<span class="string">&quot;data.in&quot;</span>, <span class="string">&quot;r&quot;</span>, <span class="built_in">stdin</span>);</span><br><span class="line"> freopen(<span class="string">&quot;data.out&quot;</span>, <span class="string">&quot;w&quot;</span>, <span class="built_in">stdout</span>);</span><br><span class="line"> <span class="meta">#<span class="meta-keyword">endif</span></span></span><br><span class="line"> <span class="keyword">int</span> x, n = <span class="number">0</span>, min = INF, max = -INF, s = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span>(<span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;x)==<span class="number">1</span>)&#123;</span><br><span class="line"> s += x;</span><br><span class="line"> <span class="keyword">if</span>(x &lt; min) min = x;</span><br><span class="line"> <span class="keyword">if</span>(x &gt; max) max = x;</span><br><span class="line"> n++;</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">&quot;%d %d %.3f\n&quot;</span>, min, max, (<span class="keyword">double</span>)s/n);</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></div></figure>
<p>2.文件读写:声明变量fin,fout,scanf改为fscanf,第一个参数为fin,printf改为fprintf,第一个参数为fout,最后执行fclose</p>
<p>eg.</p>
<figure class="highlight c++"><div class="table-container"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string">&lt;cstdio&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">define</span> INF 1000000000</span></span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line"> FILE *fin, *fout;</span><br><span class="line"> fin = fopen(<span class="string">&quot;data.in&quot;</span>, <span class="string">&quot;rb&quot;</span>); <span class="comment">//rb:以可读写打开一个文件</span></span><br><span class="line"> fout = fopen(<span class="string">&quot;data.out&quot;</span>, <span class="string">&quot;wb&quot;</span>); <span class="comment">//wb:以只写打开/新建一个文件</span></span><br><span class="line"> <span class="keyword">int</span> n, x, min = INF, max = -INF, s = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">while</span>(<span class="built_in">fscanf</span>(fin, <span class="string">&quot;%d&quot;</span>, &amp;x)==<span class="number">1</span>)&#123;</span><br><span class="line"> s += x;</span><br><span class="line"> <span class="keyword">if</span>(x &lt; min) min = x;</span><br><span class="line"> <span class="keyword">if</span>(x &gt; max) max = x;</span><br><span class="line"> n++;</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="built_in">fprintf</span>(fout, <span class="string">&quot;%d %d %.3f\n&quot;</span>, min, max, (<span class="keyword">double</span>)s/n);</span><br><span class="line"> fclose(fin);</span><br><span class="line"> fclose(fout);</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></div></figure>
<h1 id="番外篇" >
<a href="#番外篇" class="heading-link"><i class="fas fa-link"></i></a>番外篇</h1>
<p>1.用头文件#include<ctime>计算运行时间,clock()函数是时钟周期计数(机器时钟每秒所走的时钟打点数),用(double)clock() / CLOCKS_PER_SEC得到的才是以秒为单位的时间。</p>
<p>eg.计算S = 1!+2!+…+20!的末6位,观察运行时间</p>
<figure class="highlight c++"><div class="table-container"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="meta-keyword">include</span><span class="meta-string">&lt;ctime&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> <span class="built_in">std</span>;</span><br><span class="line"><span class="keyword">const</span> <span class="keyword">int</span> MOD = <span class="number">1000000</span>;</span><br><span class="line"><span class="function"><span class="keyword">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line"> <span class="keyword">int</span> n = <span class="number">20</span>, sum = <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i = <span class="number">1</span>; j &lt;= n; i++) &#123;</span><br><span class="line"> <span class="keyword">int</span> t = <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> j = <span class="number">1</span>; j &lt;= i; j++) t = (t * j) % MOD;</span><br><span class="line"> sum = (sum + t) % MOD;</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>, sum % MOD);</span><br><span class="line"> <span class="built_in">printf</span>(<span class="string">&quot;Time used: %f\n&quot;</span>, (<span class="keyword">double</span>)clock() / CLOCKS_PER_SEC);</span><br><span class="line"> <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></div></figure>
<p>运行结果:</p>
<p>820313</p>
<p>Time used : 0.001000</p>
</div></div></article><article class="postlist-item post"><header class="post-header"><h1 class="post-title"><a class="post-title__link" href="/2020/07/08/hello-world/">Hello World</a></h1><div class="post-meta"><span class="post-meta-item post-meta-item--createtime"><span class="post-meta-item__icon"><i class="far fa-calendar-plus"></i></span><span class="post-meta-item__info">发表于</span><span class="post-meta-item__value">2020-07-08</span></span><span class="post-meta-item post-meta-item--updatetime"><span class="post-meta-item__icon"><i class="far fa-calendar-check"></i></span><span class="post-meta-item__info">更新于</span><span class="post-meta-item__value">2020-07-08</span></span></div></header><div class="post-body"><div class="post-excerpt"><p>Welcome to <span class="exturl"><a class="exturl__link" target="_blank" rel="noopener" href="https://hexo.io/" >Hexo</a><span class="exturl__icon"><i class="fas fa-external-link-alt"></i></span></span>! This is your very first post. Check <span class="exturl"><a class="exturl__link" target="_blank" rel="noopener" href="https://hexo.io/docs/" >documentation</a><span class="exturl__icon"><i class="fas fa-external-link-alt"></i></span></span> for more info. If you get any problems when using Hexo, you can find the answer in <span class="exturl"><a class="exturl__link" target="_blank" rel="noopener" href="https://hexo.io/docs/troubleshooting.html" >troubleshooting</a><span class="exturl__icon"><i class="fas fa-external-link-alt"></i></span></span> or you can ask me on <span class="exturl"><a class="exturl__link" target="_blank" rel="noopener" href="https://github.com/hexojs/hexo/issues" >GitHub</a><span class="exturl__icon"><i class="fas fa-external-link-alt"></i></span></span>.</p>
<h2 id="Quick-Start" >
<a href="#Quick-Start" class="heading-link"><i class="fas fa-link"></i></a>Quick Start</h2>
<h3 id="Create-a-new-post" >
<a href="#Create-a-new-post" class="heading-link"><i class="fas fa-link"></i></a>Create a new post</h3>
<figure class="highlight bash"><div class="table-container"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo new <span class="string">&quot;My New Post&quot;</span></span><br></pre></td></tr></table></div></figure>
<p>More info: <span class="exturl"><a class="exturl__link" target="_blank" rel="noopener" href="https://hexo.io/docs/writing.html" >Writing</a><span class="exturl__icon"><i class="fas fa-external-link-alt"></i></span></span></p>
<h3 id="Run-server" >
<a href="#Run-server" class="heading-link"><i class="fas fa-link"></i></a>Run server</h3>
<figure class="highlight bash"><div class="table-container"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo server</span><br></pre></td></tr></table></div></figure>
<p>More info: <span class="exturl"><a class="exturl__link" target="_blank" rel="noopener" href="https://hexo.io/docs/server.html" >Server</a><span class="exturl__icon"><i class="fas fa-external-link-alt"></i></span></span></p>
<h3 id="Generate-static-files" >
<a href="#Generate-static-files" class="heading-link"><i class="fas fa-link"></i></a>Generate static files</h3>
<figure class="highlight bash"><div class="table-container"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo generate</span><br></pre></td></tr></table></div></figure>
<p>More info: <span class="exturl"><a class="exturl__link" target="_blank" rel="noopener" href="https://hexo.io/docs/generating.html" >Generating</a><span class="exturl__icon"><i class="fas fa-external-link-alt"></i></span></span></p>
<h3 id="Deploy-to-remote-sites" >
<a href="#Deploy-to-remote-sites" class="heading-link"><i class="fas fa-link"></i></a>Deploy to remote sites</h3>
<figure class="highlight bash"><div class="table-container"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo deploy</span><br></pre></td></tr></table></div></figure>
<p>More info: <span class="exturl"><a class="exturl__link" target="_blank" rel="noopener" href="https://hexo.io/docs/one-command-deployment.html" >Deployment</a><span class="exturl__icon"><i class="fas fa-external-link-alt"></i></span></span></p>
</div></div></article></section><nav class="paginator"><div class="paginator-inner"><span class="page-number current">1</span></div></nav></div></div><div class="sidebar-wrap" id="sidebar-wrap"><aside class="sidebar" id="sidebar"><section class="sidebar-toc hide"></section><!-- ov = overview--><section class="sidebar-ov"><div class="sidebar-ov-author"><div class="sidebar-ov-author__avatar"><img class="sidebar-ov-author__avatar_img" src="/images/avatar.png" alt="avatar"></div></div><div class="sidebar-ov-social"><a class="sidebar-ov-social-item" href="https://github.com/Hisami328" target="_blank" rel="noopener" data-popover="Github" data-popover-pos="up"><span class="sidebar-ov-social-item__icon"><i class="fab fa-github"></i></span></a><a class="sidebar-ov-social-item" href="http://wpa.qq.com/msgrd?v=3&amp;uin=1263074678&amp;site=qq&amp;menu=yes" target="_blank" rel="noopener" data-popover="QQ" data-popover-pos="up"><span class="sidebar-ov-social-item__icon"><i class="fab fa-qq"></i></span></a></div><div class="sidebar-ov-state"><a class="sidebar-ov-state-item sidebar-ov-state-item--posts" href="/archives/"><div class="sidebar-ov-state-item__count">5</div><div class="sidebar-ov-state-item__name">归档</div></a><a class="sidebar-ov-state-item sidebar-ov-state-item--categories" href="/categories/"><div class="sidebar-ov-state-item__count">2</div><div class="sidebar-ov-state-item__name">分类</div></a><a class="sidebar-ov-state-item sidebar-ov-state-item--tags" href="/tags/"><div class="sidebar-ov-state-item__count">2</div><div class="sidebar-ov-state-item__name">标签</div></a></div><div class="sidebar-ov-cc"><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en" target="_blank" rel="noopener" data-popover="知识共享许可协议" data-popover-pos="up"><img src="/images/cc-by-nc-sa.svg"></a></div></section></aside></div><div class="clearfix"></div></div></main><footer class="footer" id="footer"><div class="footer-inner"><div><span>Copyright © 2021</span><span class="footer__icon"><i class="fas fa-heart"></i></span><span>Hisami</span></div><div><span><a href="http://hexo.io/" title="Hexo" target="_blank" rel="noopener">Hexo</a> 强力驱动</span><span> v5.2.0</span><span class="footer__devider">|</span><span>主题 - <a href="https://github.com/liuyib/hexo-theme-stun/" title="Stun" target="_blank" rel="noopener">Stun</a></span><span> v2.3.0</span></div></div></footer><div class="loading-bar" id="loading-bar"><div class="loading-bar__progress"></div></div><div class="back2top" id="back2top"><span class="back2top__icon"><i class="fas fa-rocket"></i></span></div></div><div class="search-mask"></div><div class="search-popup"><span class="search-close"></span><div class="search-input"><input placeholder="搜索文章(支持多关键词,请用空格分隔)"></div><div class="search-results"></div></div><script src="https://cdn.jsdelivr.net/npm/jquery@v3.4.1/dist/jquery.min.js"></script><script src="https://cdn.jsdelivr.net/npm/velocity-animate@1.5.2/velocity.min.js"></script><script src="https://cdn.jsdelivr.net/npm/velocity-animate@1.5.2/velocity.ui.min.js"></script><script src="https://cdn.jsdelivr.net/npm/ribbon.js@latest/dist/ribbon.min.js" size="120" alpha="0.6" zIndex="-1"></script><script>function initSearch() {
var isXML = true;
var search_path = 'search.xml';
if (!search_path) {
search_path = 'search.xml';
} else if (/json$/i.test(search_path)) {
isXML = false;
}
var path = '/' + search_path;
$.ajax({
url: path,
dataType: isXML ? 'xml' : 'json',
async: true,
success: function (res) {
var datas = isXML ? $('entry', res).map(function () {
// 将 XML 转为 JSON
return {
title: $('title', this).text(),
content: $('content', this).text(),
url: $('url', this).text()
};
}).get() : res;
var $input = $('.search-input input');
var $result = $('.search-results');
// 搜索对象(标题、内容)的权重,影响显示顺序
var WEIGHT = { title: 100, content: 1 };
var searchPost = function () {
var searchText = $input.val().toLowerCase().trim();
// 根据空白字符分隔关键字
var keywords = searchText.split(/[\s]+/);
// 搜索结果
var matchPosts = [];
// 有多个关键字时,将原文字整个保存下来
if (keywords.length > 1) {
keywords.push(searchText);
}
// 防止未输入字符时搜索
if (searchText.length > 0) {
datas.forEach(function (data) {
var isMatch = false;
// 没有标题的文章使用预设的 i18n 变量代替
var title = (data.title && data.title.trim()) || '[ 文章无标题 ]';
var titleLower = title && title.toLowerCase();
// 删除 HTML 标签 和 所有空白字符
var content = data.content && data.content.replace(/<[^>]+>/g, '');
var contentLower = content && content.toLowerCase();
// 删除重复的 /
var postURL = data.url && decodeURI(data.url).replace(/\/{2,}/g, '/');
// 标题中匹配到的关键词
var titleHitSlice = [];
// 内容中匹配到的关键词
var contentHitSlice = [];
keywords.forEach(function (keyword) {
/**
* 获取匹配的关键词的索引
* @param {String} keyword 要匹配的关键字
* @param {String} text 原文字
* @param {Boolean} caseSensitive 是否区分大小写
* @param {Number} weight 匹配对象的权重。权重大的优先显示
* @return {Array}
*/
function getIndexByword (word, text, caseSensitive, weight) {
if (!word || !text) {
return [];
};
var startIndex = 0; // 每次匹配的开始索引
var index = -1; // 匹配到的索引值
var result = []; // 匹配结果
if (!caseSensitive) {
word = word.toLowerCase();
text = text.toLowerCase();
}
while((index = text.indexOf(word, startIndex)) !== -1) {
var hasMatch = false;
// 索引位置相同的关键词,保留长度较长的
titleHitSlice.forEach(function (hit) {
if (hit.index === index && hit.word.length < word.length) {
hit.word = word;
hasMatch = true;
}
});
startIndex = index + word.length;
!hasMatch && result.push({ index: index, word: word, weight: weight });
}
return result;
}
titleHitSlice = titleHitSlice.concat(getIndexByword(keyword, titleLower, false, WEIGHT.title));
contentHitSlice = contentHitSlice.concat(getIndexByword(keyword, contentLower, false, WEIGHT.content));
});
var hitTitle = titleHitSlice.length;
var hitContent = contentHitSlice.length;
if (hitTitle > 0 || hitContent > 0) {
isMatch = true;
}
if (isMatch) {
;[titleHitSlice, contentHitSlice].forEach(function (hit) {
// 按照匹配文字的索引的递增顺序排序
hit.sort(function (left, right) {
return left.index - right.index;
});
});
/**
* 给文本中匹配到的关键词添加标记,从而进行高亮显示
* @param {String} text 原文本
* @param {Array} hitSlice 匹配项的索引信息
* @param {Number} start 开始索引
* @param {Number} end 结束索引
* @return {String}
*/
function highlightKeyword (text, hitSlice, start, end) {
if (!text || !hitSlice || !hitSlice.length) {
return;
}
var result = '';
var startIndex = start;
var endIndex = end;
hitSlice.forEach(function (hit) {
if (hit.index < startIndex) {
return;
}
var hitWordEnd = hit.index + hit.word.length;
result += text.slice(startIndex, hit.index);
result += '<b>' + text.slice(hit.index, hitWordEnd) + '</b>';
startIndex = hitWordEnd;
});
result += text.slice(startIndex, endIndex);
return result;
}
var postData = {};
// 文章总的搜索权重
var postWeight = titleHitSlice.length * WEIGHT.title + contentHitSlice.length * WEIGHT.content;
// 标记匹配关键词后的标题
var postTitle = highlightKeyword(title, titleHitSlice, 0, title.length) || title;
// 标记匹配关键词后的内容
var postContent;
// 显示内容的长度
var SHOW_WORD_LENGTH = 200;
// 命中关键词前的字符显示长度
var SHOW_WORD_FRONT_LENGTH = 20;
var SHOW_WORD_END_LENGTH = SHOW_WORD_LENGTH - SHOW_WORD_FRONT_LENGTH;
// 截取匹配的第一个字符,前后共 200 个字符来显示
if (contentHitSlice.length > 0) {
var firstIndex = contentHitSlice[0].index;
var start = firstIndex > SHOW_WORD_FRONT_LENGTH ? firstIndex - SHOW_WORD_FRONT_LENGTH : 0;
var end = firstIndex + SHOW_WORD_END_LENGTH;
postContent = highlightKeyword(content, contentHitSlice, start, end);
} else { // 未匹配到内容,直接截取前 200 个字符来显示
postContent = content.slice(0, SHOW_WORD_LENGTH);
}
postData.title = postTitle;
postData.content = postContent;
postData.url = postURL;
postData.weight = postWeight;
matchPosts.push(postData);
}
});
}
var resultInnerHtml = '';
if (matchPosts.length) {
// 按权重递增的顺序排序,使权重大的优先显示
matchPosts.sort(function (left, right) {
return right.weight - left.weight;
});
resultInnerHtml += '<ul>';
matchPosts.forEach(function (post) {
resultInnerHtml += '<li><a class="search-results-title" href="' + post.url + '">';
resultInnerHtml += post.title;
resultInnerHtml += '</a><div class="search-results-content">';
resultInnerHtml += post.content;
resultInnerHtml += '</div></li>';
});
resultInnerHtml += '</ul>';
} else {
resultInnerHtml += '<div class="search-results-none"><i class="far fa-meh"></i></div>';
}
$result.html(resultInnerHtml);
};
$input.on('input', searchPost);
$input.on('keyup', function (e) {
if (e.keyCode === Stun.utils.codeToKeyCode('Enter')) {
searchPost();
}
});
}
});
}
function closeSearch () {
$('body').css({ overflow: 'auto' });
$('.search-popup').css({ display: 'none' });
$('.search-mask').css({ display: 'none' });
}
window.addEventListener('DOMContentLoaded', function () {
Stun.utils.pjaxReloadLocalSearch = function () {
$('.header-nav-search').on('click', function (e) {
e.stopPropagation();
$('body').css('overflow', 'hidden');
$('.search-popup')
.velocity('stop')
.velocity('transition.expandIn', {
duration: 300,
complete: function () {
$('.search-popup input').focus();
}
});
$('.search-mask')
.velocity('stop')
.velocity('transition.fadeIn', {
duration: 300
});
initSearch();
});
$('.search-mask, .search-close').on('click', function () {
closeSearch();
});
$(document).on('keydown', function (e) {
// Escape <=> 27
if (e.keyCode === Stun.utils.codeToKeyCode('Escape')) {
closeSearch();
}
});
};
Stun.utils.pjaxReloadLocalSearch();
}, false);
function safeOpenUrl(url) {
var newTab = window.open();
newTab.opener = null;
newTab.location = url;
}
function extSearch(engine) {
var engines = {
google: 'https://www.google.com/search?q=',
bing: 'https://cn.bing.com/search?q=',
baidu: 'https://www.baidu.com/s?ie=UTF-8&wd=',
};
var host = window.location.host;
var query = $('.search-input input').val().toLowerCase().trim();
var uri = engines[engine] + query + ' site:' + host;
if (query) {
safeOpenUrl(uri);
} else {
Stun.utils.popAlert('warning', '请输入字符');
}
}
var assistSearchList = window.CONFIG.assistSearch;
if (Array.isArray(assistSearchList)) {
assistSearchList.forEach(function (name) {
document.querySelector('.search-btns-item--' + name).addEventListener('click', function () {
extSearch(name);
}, false);
});
}</script><script src="https://cdn.jsdelivr.net/npm/pjax@latest/pjax.min.js"></script><script>window.addEventListener('DOMContentLoaded', function () {
var pjax = new Pjax({"selectors":["head title","#main",".pjax-reload"],"history":true,"scrollTo":false,"scrollRestoration":false,"cacheBust":false,"debug":false,"currentUrlFullReload":false,"timeout":0});
// 加载进度条的计时器
var loadingTimer = null;
// 重置页面 Y 方向上的滚动偏移量
document.addEventListener('pjax:send', function () {
$('.header-nav-menu').removeClass('show');
if (CONFIG.pjax && CONFIG.pjax.avoidBanner) {
$('html').velocity('scroll', {
duration: 500,
offset: $('#header').height(),
easing: 'easeInOutCubic'
});
}
var loadingBarWidth = 20;
var MAX_LOADING_WIDTH = 95;
$('.loading-bar').addClass('loading');
$('.loading-bar__progress').css('width', loadingBarWidth + '%');
clearInterval(loadingTimer);
loadingTimer = setInterval(function () {
loadingBarWidth += 3;
if (loadingBarWidth > MAX_LOADING_WIDTH) {
loadingBarWidth = MAX_LOADING_WIDTH;
}
$('.loading-bar__progress').css('width', loadingBarWidth + '%');
}, 500);
}, false);
window.addEventListener('pjax:complete', function () {
clearInterval(loadingTimer);
$('.loading-bar__progress').css('width', '100%');
$('.loading-bar').removeClass('loading');
setTimeout(function () {
$('.loading-bar__progress').css('width', '0');
}, 400);
$('link[rel=prefetch], script[data-pjax-rm]').each(function () {
$(this).remove();
});
$('script[data-pjax], #pjax-reload script').each(function () {
$(this).parent().append($(this).remove());
});
if (Stun.utils.pjaxReloadBoot) {
Stun.utils.pjaxReloadBoot();
}
if (Stun.utils.pjaxReloadScroll) {
Stun.utils.pjaxReloadScroll();
}
if (Stun.utils.pjaxReloadSidebar) {
Stun.utils.pjaxReloadSidebar();
}
if (false) {
if (Stun.utils.pjaxReloadHeader) {
Stun.utils.pjaxReloadHeader();
}
if (Stun.utils.pjaxReloadScrollIcon) {
Stun.utils.pjaxReloadScrollIcon();
}
if (Stun.utils.pjaxReloadLocalSearch) {
Stun.utils.pjaxReloadLocalSearch();
}
}
}, false);
}, false);</script><div id="pjax-reload"><link href="https://cdn.jsdelivr.net/npm/katex@0.10.2/dist/katex.min.css" rel="stylesheet" type="text/css"><link href="https://cdn.jsdelivr.net/npm/katex@0.10.2/dist/contrib/copy-tex.css" rel="stylesheet" type="text/css"><script src="https://cdn.jsdelivr.net/npm/katex@0.10.2/dist/contrib/copy-tex.min.js"></script><script src="https://cdn.jsdelivr.net/npm/quicklink@1.0.1/dist/quicklink.umd.js"></script><script>function initQuicklink() {
quicklink({
timeout: '10000',
priority: true,
ignores: [uri => uri.includes('#'), uri => uri === 'https://hisami.gitee.io/', /\/api\/?/,uri => uri.includes('.xml'),uri => uri.includes('.zip'),(uri, el) => el.hasAttribute('nofollow'),(uri, el) => el.hasAttribute('noprefetch')]
});
}
if (true || false) {
initQuicklink();
} else {
window.addEventListener('DOMContentLoaded', initQuicklink, false);
}</script></div><script src="/js/utils.js?v=2.3.0"></script><script src="/js/stun-boot.js?v=2.3.0"></script><script src="/js/scroll.js?v=2.3.0"></script><script src="/js/header.js?v=2.3.0"></script><script src="/js/sidebar.js?v=2.3.0"></script><script type="application/json" src="/search.xml"></script></body></html>
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/hisami/hisami.git
git@gitee.com:hisami/hisami.git
hisami
hisami
Hisami
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891