def knightGraph(bdSize): g = Graph() for col in range(bdSize): for row in range(bdSize): nodeId = posToNodeId(row, col, bdSize) moves = getLegalMoves(row, col, bdSize) for move in moves: nid = posToNodeId(move[0], move[1], bdSize) g.addEdge(nodeId, nid) return g
def knightGraph(bdSize): """ 建立KtGraoh """ ktGraph = Graph() for row in range(bdSize): for col in range(bdSize): nodeId = posToNodeId(row, col, bdSize) # 获取当前的NodeId newPositions = genLegalMoves(row,col,bdSize) # 返回可移动位置的列表 for e in newPositions: nid = posToNodeId(e[0], e[1], bdSize) # 产生可移动结点的NodeId ktGraph.addEdge(nodeId, nid) return ktGraph
def buildGraph(wordfile): d = {} g = Graph() with open(wordfile, 'r') as file: for line in file: word = line[:-1] for i in range(len(word)): bucket = word[:i] + '_' + word[i + 1:] if bucket in d: d[bucket].append(word) else: d[bucket] = [word] for bucket in d.keys(): for word1 in d[bucket]: for word2 in word1: if word1 != word2: g.addEdge(word1, word2) return g
def buildGraph(wordFile): d = {} g = Graph() wfile = open(wordFile, 'r') # create buckets of words that differ by one letter for line in wfile: word = line[:-1] for i in range(len(word)): bucket = word[:i] + '_' + word[i + 1:] if bucket in d: d[bucket].append(word) else: d[bucket] = [word] # add vertices and edges for words in the same bucket for bucket in d.keys(): for word1 in d[bucket]: for word2 in d[bucket]: if word1 != word2: g.addEdge(word1, word2) return g
def BulidGraph(wordFile): """ :param wordFile: 传入一个记录所有相同长度的单词的列表 :return: 返回按照特性连接的图 """ g=Graph() d={} # 以三个相同字母+_为键,包含这三个字母的单词为值,记录wordFile中仅有一个字母不同的单词的集合,便于利用该字典添加边 # addEdge的原则:当两个相同长度单词间仅有一个字母不同时,添加一条无向边 words=open(wordFile,'r') # words-包含wordFile中所有单词的列表 for lines in words: word=lines[:-1] # 提取掉'\n' for i in range(len(word)): bucket=word[:i]+'_'+word[i+1:] if bucket in d: d[bucket].append(word) else: d[bucket]=[word] # 注意这里一个key可能对应着多个word,所以word要存储在列表中 """提取绘图字典d""" for bucket in d.keys(): for word1 in d[bucket]: for word2 in d[bucket]: if word1!=word2: g.addEdge(word1,word2) return g