Exemplo n.º 1
0
string CDecoder::GenTree(const vector<CDepNode> &nodes, const int &root)
{
	string tree;
	int kid;

	for (kid = int(nodes[root].leftMods.size()) - 1; kid >= 0; --kid)
	{
		tree += "("
			+ GenTree(nodes, nodes[root].leftMods[kid])
			+ ") ";
	}

	tree += m_vToken[root].word + "/" + m_vToken[root].POS;

	for (kid = 0; kid < int(nodes[root].rightMods.size()); ++kid)
	{
		tree += " ("
			+ GenTree(nodes, nodes[root].rightMods[kid])
			+ ")";
	}

	return tree;
}
Exemplo n.º 2
0
Arquivo: graph.c Projeto: 8l/csolve
/*
 * Generates random connected undirected graphs.  Unfortunately this current
 * implementation does not generate the graphs with a uniform distribution.
 *
 * Apparently a good reference is Tinhofer G., ,
 * C. Hanser, Verlag, M\"{u}nchen 1980.
 */
Vertices *
GenGraph(int nVertex, int nEdge)
{
  Vertices * graph;

  assert(nEdge + 1 >= nVertex);
  assert(nEdge <= nVertex * (nVertex - 1) / 2);

  generatedEdges = 0;

  graph = GenTree(nVertex);
  graph = AddEdges(graph, nVertex, nEdge - nVertex + 1);
  return(graph);
}
Exemplo n.º 3
0
//由动作序列生成分析结果
void CDecoder::GetResult(const CState &state, string &result)
{
	int root = state.stack.back().id;
	const vector<CDepPair> &edges = state.edges;
	vector<CDepNode> depNodes(m_vToken.size());
	size_t i;

	for (i = 0; i < edges.size(); ++i)
	{
		int head = edges[i].head;
		int mod = edges[i].modifier;

		if (mod < head)
		{
			depNodes[head].leftMods.push_back(mod);
		}
		else
		{
			depNodes[head].rightMods.push_back(mod);
		}
	}

	result = "(" + GenTree(depNodes, root) + ")";
}