python實(shí)現(xiàn)機(jī)器人行走效果
本文實(shí)例為大家分享了python實(shí)現(xiàn)機(jī)器人行走效果的具體代碼,供大家參考,具體內(nèi)容如下
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# fileName : robot_path.py
# author : zoujiameng@aliyun.com.cn
# 地上有一個(gè)m行和n列的方格。一個(gè)機(jī)器人從坐標(biāo)0,0的格子開始移動(dòng),每一次只能向左,右,上,下四個(gè)方向移動(dòng)一格,但是不能進(jìn)入行坐標(biāo)和列坐標(biāo)的數(shù)位之和大于k的格子。
# 例如,當(dāng)k為18時(shí),機(jī)器人能夠進(jìn)入方格(35,37),因?yàn)?+5+3+7 = 18。但是,它不能進(jìn)入方格(35,38),因?yàn)?+5+3+8 = 19。請(qǐng)問(wèn)該機(jī)器人能夠達(dá)到多少個(gè)格子?
class Robot:
# 共用接口,判斷是否超過(guò)K
def getDigitSum(self, num):
sumD = 0
while(num>0):
sumD+=num%10
num/=10
return int(sumD)
def PD_K(self, rows, cols, K):
sumK = self.getDigitSum(rows) + self.getDigitSum(cols)
if sumK > K:
return False
else:
return True
def PD_K1(self, i, j, k):
"確定該位置是否可以走,將復(fù)雜約束條件設(shè)定"
index = map(str,[i,j])
sum_ij = 0
for x in index:
for y in x:
sum_ij += int(y)
if sum_ij <= k:
return True
else:
return False
# 共用接口,打印遍歷的visited二維list
def printMatrix(self, matrix, r, c):
print("cur location(", r, ",", c, ")")
for x in matrix:
for y in x:
print(y, end=' ')
print()
#回溯法
def hasPath(self, threshold, rows, cols):
visited = [ [0 for j in range(cols)] for i in range(rows) ]
count = 0
startx = 0
starty = 0
#print(threshold, rows, cols, visited)
visited = self.findPath(threshold, rows, cols, visited, startx, starty, -1, -1)
for x in visited:
for y in x:
if( y == 1):
count+=1
print(visited)
return count
def findPath(self, threshold, rows, cols, visited, curx, cury, prex, prey):
if 0 <= curx < rows and 0 <= cury < cols and self.PD_K1(curx, cury, threshold) and visited[curx][cury] != 1: # 判斷當(dāng)前點(diǎn)是否滿足條件
visited[curx][cury] = 1
self.printMatrix(visited, curx, cury)
prex = curx
prey = cury
if cury+1 < cols and self.PD_K1(curx, cury+1, threshold) and visited[curx][cury+1] != 1: # east
visited[curx][cury+1] = 1
return self.findPath(threshold, rows, cols, visited, curx, cury+1, prex, prey)
elif cury-1 >= 0 and self.PD_K1(curx, cury-1, threshold) and visited[curx][cury-1] != 1: # west
visited[curx][cury-1] = 1
return self.findPath(threshold, rows, cols, visited, curx, cury-1, prex, prey)
elif curx+1 < rows and self.PD_K1(curx+1, cury, threshold) and visited[curx+1][cury] != 1: # sourth
visited[curx+1][cury] = 1
return self.findPath(threshold, rows, cols, visited, curx+1, cury, prex, prey)
elif 0 <= curx-1 and self.PD_K1(curx-1, cury, threshold) and visited[curx-1][cury] != 1: # north
visited[curx-1][cury] = 1
return self.findPath(threshold, rows, cols, visited, curx-1, cury, prex, prey)
else: # 返回上一層,此處有問(wèn)題
return visited#self.findPath(threshold, rows, cols, visited, curx, cury, prex, prey)
#回溯法2
def movingCount(self, threshold, rows, cols):
visited = [ [0 for j in range(cols)] for i in range(rows) ]
print(visited)
count = self.movingCountCore(threshold, rows, cols, 0, 0, visited);
print(visited)
return count
def movingCountCore(self, threshold, rows, cols, row, col, visited):
cc = 0
if(self.check(threshold, rows, cols, row, col, visited)):
visited[row][col] = 1
cc = 1 + self.movingCountCore(threshold, rows, cols, row+1, col,visited) + self.movingCountCore(threshold, rows, cols, row, col+1, visited) + self.movingCountCore(threshold, rows, cols, row-1, col, visited) + self.movingCountCore(threshold, rows, cols, row, col-1, visited)
return cc
def check(self, threshold, rows, cols, row, col, visited):
if( 0 <= row < rows and 0 <= col < cols and (self.getDigitSum(row)+self.getDigitSum(col)) <= threshold and visited[row][col] != 1):
return True;
return False
# 暴力法,直接用當(dāng)前坐標(biāo)和K比較
def force(self, rows, cols, k):
count = 0
for i in range(rows):
for j in range(cols):
if self.PD_K(i, j, k):
count+=1
return count
# 暴力法2, 用遞歸法來(lái)做
def block(self, r, c, k):
s = sum(map(int, str(r)+str(c)))
return s>k
def con_visited(self, rows, cols):
visited = [ [0 for j in range(cols)] for i in range(rows) ]
return visited
def traval(self, r, c, rows, cols, k, visited):
if not (0<=r<rows and 0<=c<cols):
return
if visited[r][c] != 0 or self.block(r, c, k):
visited[r][c] = -1
return
visited[r][c] = 1
global acc
acc+=1
self.traval(r+1, c, rows, cols, k, visited)
self.traval(r, c+1, rows, cols, k, visited)
self.traval(r-1, c, rows, cols, k, visited)
self.traval(r, c-1, rows, cols, k, visited)
return acc
if __name__ == "__main__":
# 調(diào)用測(cè)試
m = 3
n = 3
k = 1
o = Robot()
print(o.hasPath(k, m, n))
print(o.force(m,n,k))
global acc
acc = 0
print(o.traval(0, 0, m, n, k, o.con_visited(m,n)))
print(o.movingCount(k, m, n))
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python基于itchat實(shí)現(xiàn)微信群消息同步機(jī)器人
- 采用python實(shí)現(xiàn)簡(jiǎn)單QQ單用戶機(jī)器人的方法
- 基于Python如何使用AIML搭建聊天機(jī)器人
- 教你用Python創(chuàng)建微信聊天機(jī)器人
- 快速實(shí)現(xiàn)基于Python的微信聊天機(jī)器人示例代碼
- python使用itchat庫(kù)實(shí)現(xiàn)微信機(jī)器人(好友聊天、群聊天)
- Python實(shí)現(xiàn)聊天機(jī)器人的示例代碼
- 使用Python的Tornado框架實(shí)現(xiàn)一個(gè)簡(jiǎn)單的WebQQ機(jī)器人
- python實(shí)現(xiàn)機(jī)器人卡牌
相關(guān)文章
如何用Pytorch搭建一個(gè)房?jī)r(jià)預(yù)測(cè)模型
這篇文章主要介紹了用Pytorch搭建一個(gè)房?jī)r(jià)預(yù)測(cè)模型,在這里我將主要討論P(yáng)yTorch建模的相關(guān)方面,作為一點(diǎn)額外的內(nèi)容,我還將演示PyTorch中開發(fā)的模型的神經(jīng)元重要性,需要的朋友可以參考下2023-03-03
ubuntu系統(tǒng)下多個(gè)python版本如何設(shè)置默認(rèn)python和pip
pip是一個(gè)用來(lái)安裝Python軟件包的工具,下面這篇文章主要給大家介紹了關(guān)于ubuntu系統(tǒng)下多個(gè)python版本如何設(shè)置默認(rèn)python和pip的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12
Python 識(shí)別12306圖片驗(yàn)證碼物品的實(shí)現(xiàn)示例
這篇文章主要介紹了Python 識(shí)別12306圖片驗(yàn)證碼物品的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
Pytorch中accuracy和loss的計(jì)算知識(shí)點(diǎn)總結(jié)
在本片文章里小編給大家整理的是關(guān)于Pytorch中accuracy和loss的計(jì)算相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。2019-09-09
python tkinter實(shí)現(xiàn)連連看游戲
這篇文章主要介紹了python tkinter實(shí)現(xiàn)連連看游戲的示例,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-11-11
Python爬蟲入門案例之爬取去哪兒旅游景點(diǎn)攻略以及可視化分析
讀萬(wàn)卷書不如行萬(wàn)里路,學(xué)的扎不扎實(shí)要通過(guò)實(shí)戰(zhàn)才能看出來(lái),本篇文章手把手帶你爬取去哪兒平臺(tái)的旅游景點(diǎn)攻略并進(jìn)行可視化分析,大家可以在過(guò)程中查缺補(bǔ)漏,看看自己掌握程度怎么樣2021-10-10
python基于mysql實(shí)現(xiàn)的簡(jiǎn)單隊(duì)列以及跨進(jìn)程鎖實(shí)例詳解
這篇文章主要介紹了python基于mysql實(shí)現(xiàn)的簡(jiǎn)單隊(duì)列以及跨進(jìn)程鎖,需要的朋友可以參考下2014-07-07
python神經(jīng)網(wǎng)絡(luò)編程實(shí)現(xiàn)手寫數(shù)字識(shí)別
這篇文章主要為大家詳細(xì)介紹了python神經(jīng)網(wǎng)絡(luò)編程實(shí)現(xiàn)手寫數(shù)字識(shí)別,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05
使用Python給頭像戴上圣誕帽的圖像操作過(guò)程解析
這篇文章主要介紹了使用Python給頭像戴上圣誕帽的過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09

