White scenery @showyou, hatena

If you have any comments, you may also send twitter @shsub or @showyou.

深さ優先探索2

昨日のだと答えまで探せそうもないので書き換えた。結構見栄えが悪い。。
dfs.py

#!/usr/bin/env python
#! -*- coding:utf-8 -*-

#sqlalchemyで深さ優先探索
import model

def depthFirstSearch():
    session = model.startSession()
    q = session.query(model.Markov)
    node = {"text":u"A","visit":False}
    stack =[]
    stack.append(node)
    while len(stack) != 0:
        node = stack[-1]
        if node["text"] == u"yyend":
            stack[-1]["visit"] = True
            break
        else:
            if node["visit"] == True:
                stack.pop()
            else:
                print (node["text"])
                stack[-1]["visit"] = True
                f = q.filter(model.Markov.now==node["text"])
                for fq in f:
                    stack.append({"text":fq.next,"visit":False})

    print ("ans")
    for s in stack:
        if s["visit"] == True: print s
depthFirstSearch()

model.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# マルコフテーブル等定義
import sqlalchemy
from sqlalchemy.orm import scoped_session, sessionmaker, mapper
from sqlalchemy import MetaData
from sqlalchemy import Column, MetaData, Table, types
from datetime import datetime

class Markov(object):
    pass

metadata = sqlalchemy.MetaData()

markovOneColumn = Table("markovVsearchTemp",metadata,
                    Column('id', types.Integer, primary_key=True),
                    Column('now', types.Unicode(32)),
                    Column('next', types.Unicode(32)),
                    Column('count', types.Integer,default=1),
                    mysql_engine = 'MyISAM',
                    mysql_charset= 'utf8'
                    )

def startSession():
    
    config = {"sqlalchemy.url":
            "データベースへのパス"  }
    engine = sqlalchemy.engine_from_config(config)

    dbSession = scoped_session(
                    sessionmaker(
                        autoflush = True,
                        transactional = True,
                        bind = engine
                    )
                )

    mapper(Markov,markovOneColumn)
    metadata.create_all(bind=engine)
    print ("--start DB Session--")
    return dbSession


実行結果

$ dfs.py
--start DB Session--
A
F
G
B
E
ans
{'text': u'A', 'visit': True}
{'text': u'B', 'visit': True}
{'text': u'E', 'visit': True}
{'text': u'yyend', 'visit': True}