鱼C论坛

 找回密码
 立即注册
查看: 1533|回复: 1

stack栈的运用

[复制链接]
发表于 2020-12-28 01:46:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我是一个编程的新手,然后学校布置一个作业,是用stack栈和Queues队列分别实现填充算法,就是把一个白板,从一个个点往外一个一个像素的填充黑色,以至于全部为黑色。但是作业是让我们用栈和队列来实现算法,不能用递归。求大佬们帮助
下面是老师已经写好的组。
class Screen():
    """defines a screen of x times y pixels initially all coloured white"""
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.colour = []
        for i in range(x):
            self.colour += [["white"]*y]
    def __contains__(self, coord):
        (p, q) = coord
        if 0 <= p and p < self.x and 0 <= q and q < self.y:
            return True
        else:
            return False
    def check_pixel(self, p, q):
        return self.colour[p][q]
    def fill(self, p, q):
        self.colour[p][q] = "black"
    def check_filled(self):
        for i in range(self.x):
            for j in range(self.y):
                if self.colour[j] != "black":
                    return False
        return True

class Node:
    def __init__(self, data, before=None, after=None):
        self.data = data
        self.before = before
        self.after = after

class Stack:
    def __init__(self):
        self.head = None
    def isEmpty(self):
        return self.head == None
    def pop(self):
        output = self.head.data
        self.head = self.head.before
        return output
    def push(self, data):
        self.head = Node(data, self.head)
    def top(self):
        return self.head.data
   
class Queue:
    def __init__(self):
        self.head = None
        self.rear = None
    def isEmpty(self):
        return self.head == None
    def dequeue(self):
        output = self.head.data
        self.head = self.head.after
        if self.head == None:
            self.rear = None
        return output
    def enqueue(self, data):
        if self.rear == None:
            self.head = Node(data)
            self.rear = self.head
        else:
            self.rear.after = Node(data, self.rear)
            self.rear = self.rear.after
    def front(self):
        return self.head.data

def floodfill_recursive(screen, x, y):
    """apply floodfill to screen starting at pixel at coordinate (x,y)"""
   
    #BASE CASE
    if ((x, y) in screen) == False:            #check if pixel is on screen
        return
    if screen.check_pixel(x, y) != "white":    #check if pixel is currently white
        return
   
    #RECURSIVE CASE
    screen.fill(x, y)                          #colour pixel with black
    floodfill_recursive(screen, x+1, y)        #make recursive calls to all neighbouring pixels
    floodfill_recursive(screen, x-1, y)
    floodfill_recursive(screen, x, y+1)
    floodfill_recursive(screen, x, y-1)
   

然后这个是老师已经搭建好的函数
我想的是把这个screen屏幕当做一个二维数值然后再用栈一列一列的处理,但是我不知道如何把screen和栈还有二维数值联系起来,因为我用print打印这个栈显示的是一个内存的位置。以至于我没办法去查看里面的元素。
求大佬指导一下如何实现,或者告诉我的方向,谢谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-8 19:51:14 | 显示全部楼层
请用代码格式发帖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 23:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表