Уведомления

Группа в Telegram: @pythonsu

#1 Июль 6, 2011 00:10:43

Actor
От:
Зарегистрирован: 2010-10-10
Сообщения: 39
Репутация: +  0  -
Профиль  

помогите написать прогу, или подскажите алгоритм

может завтра напишу. но тут проще всего рекурсией, имхо



Офлайн

#2 Июль 6, 2011 00:15:21

Felix_228
От:
Зарегистрирован: 2011-07-06
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите написать прогу, или подскажите алгоритм

спасибо выручишь))))) а то я совсем запутался(((



Офлайн

#3 Июль 6, 2011 01:27:51

Actor
От:
Зарегистрирован: 2010-10-10
Сообщения: 39
Репутация: +  0  -
Профиль  

помогите написать прогу, или подскажите алгоритм

import sys
from copy import deepcopy
sys.setrecursionlimit = 1000000
doska = [[-2 for i in xrange(8)] for i in xrange(8)]
def print_doska(doska):
for i in doska:
print i
print '------------------------'
print_doska(doska)
horse = [input(),input()]
n = input()
doska[horse[0]][horse[1]] = -1
print_doska(doska)
def step(N,n,x,y,doska):
if n == 0:
print_doska(doska)
else:
if x>=2 and y>=1:
step1 = deepcopy(doska)
step1[x-2][y-1] = N-n
step(N,n-1,x-2,y-1,step1)
if x>=2 and y<=6:
step2=deepcopy(doska)
step2[x-2][y+1] = N-n
step(N,n-1,x-2,y+1,step2)
if x>=1 and y<=5:
step3=deepcopy(doska)
step3[x-1][y+2]=N-n
step(N,n-1,x-1,y+2,step3)
if x<=6 and y<=5:
step4=deepcopy(doska)
step4[x+1][y+2] = N-n
step(N,n-1,x+1,y+2,step4)
if x<=5 and y<=6:
step5=deepcopy(doska)
step5[x+2][y+1]=N-n
step(N,n-1,x+2,y+1,step5)
if x<=5 and y>=1:
step6=deepcopy(doska)
step6[x+2][y-1]=N-n
step(N,n-1,x+2,y-1,step6)
if x<=6 and y>=2:
step7=deepcopy(doska)
step7[x+1][y-2]=N-n
step(N,n-1,x+1,y-2,step7)
if x>=1 and y>=2:
step8=deepcopy(doska)
step8[x-1][y-2]=N-n
step(N,n-1,x-1,y-2,step8)
step(n,n,horse[0],horse[1],doska)
за быдлокод не пинайть. вроде работает. разберешься сам :)

подсказка:
-2 - клетка, на которой конь не был
-1 - начальная клетка
0,1,2… - последовательность ходов коня

кстати, при большом n конь может (а может и нет) попадать в одну клетку несколько раз - я это при выводе не учитывал. если надо - допилю

пс1: если разберешь исходник - поймёшь алгоритм
пс2: будут вопросы - пишы
пс3: хз насколько релевантно, вот картинка, по которой я решал


мм, немного не то вывел. я вывел не только эти позиции, но и как к ним пройти. в приниципе тут несложно будет изменить)

___________________________________________________

вот вроде то, что ты просил
import sys
from copy import deepcopy
sys.setrecursionlimit = 1000000
doska = [[0 for i in xrange(8)] for i in xrange(8)]
def print_doska(doska):
for i in doska:
print i
print '------------------------'
horse = [input(),input()]
n = input()
def step(N,n,x,y,doska):
if n == 0:
pass
## print_doska(doska)
elif n <>1:
if x>=2 and y>=1:
step(N,n-1,x-2,y-1,doska)
if x>=2 and y<=6:
step(N,n-1,x-2,y+1,doska)
if x>=1 and y<=5:
step(N,n-1,x-1,y+2,doska)
if x<=6 and y<=5:
step(N,n-1,x+1,y+2,doska)
if x<=5 and y<=6:
step(N,n-1,x+2,y+1,doska)
if x<=5 and y>=1:
step(N,n-1,x+2,y-1,doska)
if x<=6 and y>=2:
step(N,n-1,x+1,y-2,doska)
if x>=1 and y>=2:
step(N,n-1,x-1,y-2,doska)
else:
if x>=2 and y>=1:
doska[x-2][y-1] = 2
step(N,n-1,x-2,y-1,doska)
if x>=2 and y<=6:
doska[x-2][y+1] = 2
step(N,n-1,x-2,y+1,doska)
if x>=1 and y<=5:
doska[x-1][y+1] = 2
step(N,n-1,x-1,y+2,doska)
if x<=6 and y<=5:
doska[x+1][y+2] = 2
step(N,n-1,x+1,y+2,doska)
if x<=5 and y<=6:
doska[x-2][y-1] = 2
step(N,n-1,x-2,y-1,doska)
if x<=5 and y>=1:
doska[x-2][y-1] = 2
step(N,n-1,x-2,y-1,doska)
if x<=6 and y>=2:
doska[x+1][y-2] = 2
step(N,n-1,x+1,y-2,doska)
if x>=1 and y>=2:
doska[x-1][y-2] = 2
step(N,n-1,x-1,y-2,doska)
step(n,n,horse[0],horse[1],doska)
print_doska(doska)



Отредактировано (Июль 6, 2011 02:09:50)

Офлайн

#4 Июль 6, 2011 02:08:20

Actor
От:
Зарегистрирован: 2010-10-10
Сообщения: 39
Репутация: +  0  -
Профиль  

помогите написать прогу, или подскажите алгоритм

2 Necron:
в первом коде есть небольшая ошибка. тут она исправлена

import math
doska = [[0 for i in xrange(8)] for i in xrange(8)]
def print_doska(doska):
for i in doska:
print i
print '-------------------------------------'
print_doska(doska)
f = [[0,0],[0,0],[0,0]]
for i in xrange(3):
f[i][0] = input()
f[i][1] = input()
doska[f[i][0]][f[i][1]] = i + 1
print_doska(doska)
def check_tura(f):
if f[0][0] == f[2][0]:
if (f[0][0]==f[1][0]) and ((f[0][1]<f[1][1]<f[2][1]) or (f[2][1]<f[1][1]<f[0][1])): return False
else: return True
elif f[0][1] == f[2][1]:
if (f[0][1]==f[1][1]) and ((f[0][0]<f[1][0]<f[2][0]) or (f[2][0]<f[1][0]<f[0][0])): return False
else: return True
else: return False
def check_officer(f):
if (math.fabs(f[0][0]-f[1][0])==math.fabs(f[0][1]-f[1][1])):
if (math.fabs(f[0][0]-f[2][0])==math.fabs(f[0][1]-f[2][1])):
if ((f[0][0]<f[2][0]<f[1][0]) and (f[0][1]<f[2][1]<f[1][1])) or \
((f[0][0]>f[2][0]>f[1][0]) and (f[0][1]<f[2][1]<f[1][1])) or \
((f[0][0]<f[2][0]<f[1][0]) and (f[0][1]>f[2][1]>f[1][1])) or \
((f[0][0]>f[2][0]>f[1][0]) and (f[0][1]>f[2][1]>f[1][1])):
return False
else: return True
else: return True
else: return False

print 'Bjet tura - ', check_tura(f), ', bjet officer - ', check_officer(f)



Офлайн

#5 Июль 6, 2011 09:55:21

Felix_228
От:
Зарегистрирован: 2011-07-06
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите написать прогу, или подскажите алгоритм

Спасибо большое)))))



Офлайн

#6 Июль 6, 2011 10:02:24

Felix_228
От:
Зарегистрирован: 2011-07-06
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите написать прогу, или подскажите алгоритм

У меня почему то он ошибку выдает присохранении “… print i
print ‘————————’…” в начале к i придерается потом к кавычке последней и почему то отступы считает ошибкой((((



Офлайн

#7 Июль 6, 2011 10:34:49

pill
От:
Зарегистрирован: 2010-08-27
Сообщения: 223
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите написать прогу, или подскажите алгоритм

Felix_228
У меня почему то он ошибку выдает присохранении “… print i
print ‘————————’…” в начале к i придерается потом к кавычке последней и почему то отступы считает ошибкой((((
Что то мне подсказывает что у вас Python 3.x…



Офлайн

#8 Июль 6, 2011 10:35:55

Nekron
От:
Зарегистрирован: 2011-07-05
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите написать прогу, или подскажите алгоритм

да



Офлайн

#9 Июль 6, 2011 10:38:50

Nekron
От:
Зарегистрирован: 2011-07-05
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите написать прогу, или подскажите алгоритм

а это на каком?



Офлайн

#10 Июль 6, 2011 10:43:42

pill
От:
Зарегистрирован: 2010-08-27
Сообщения: 223
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите написать прогу, или подскажите алгоритм

2.7 скорее всего.



Отредактировано (Июль 6, 2011 10:44:07)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version