private void dfs(EdgeWeightDiGraph g, int begin) { isMarked[begin] = true; inStack[begin] = true; foreach (DirectedEdge e in g.getAdj(begin)) { int node = e.getTo(); //if (hasCycle()) return; if (!isMarked[node]) { edgeTo[node] = begin; dfs(g, node); } else if (inStack[node]) { // 如果当前路径Stack中含有node,又再次访问的话,说明有环 // 将环保存下来 Stack <Vertex> cycle = new Stack <Vertex>(); for (int i = begin; i != node; i = edgeTo[i]) { cycle.Push(g.getVetrx(i)); Console.Write("访问环点:" + i + " "); } cycle.Push(g.getVetrx(node)); Console.Write("访问环点:" + node + " "); // cycle.Push(g.getVetrx(begin)); cycleList.Add(cycle); } } inStack[begin] = false; }
static void Main(string[] args) { Console.WriteLine("先试试串联"); Console.WriteLine("请输入顶点数"); int vertxCount = int.Parse(Console.ReadLine()); Console.WriteLine("请输入边数"); int edgeCount = int.Parse(Console.ReadLine()); EdgeWeightDiGraph g = new EdgeWeightDiGraph(vertxCount); for (int v = 0; v < vertxCount; v++) { if (v != 0) { g.getVetrx(v).Resistance = 5;//电阻暂定为5 } } for (int i = 0; i < edgeCount; i++) { Console.Write("输入边顶点1:"); int v = int.Parse(Console.ReadLine()); Console.Write("输入边顶点2:"); int w = int.Parse(Console.ReadLine()); DirectedEdge e = new DirectedEdge(v, w); g.addEdge(e); } g.getVetrx(0).Voltage = 20;//设为电池,电压为20V DirectedCycle checkCircle = new DirectedCycle(g); checkCircle.Generation(g, g.getVetrx(0)); if (checkCircle.hasCycle()) { Console.WriteLine(checkCircle.toString()); } else { Console.WriteLine("无环,断路"); } Console.WriteLine(g.toString()); Console.ReadKey(); }
public void SetEle(EdgeWeightDiGraph g, Stack <Vertex> cycle, float electry)//每圈分别设置电压,电流 { for (int c = 0; c < cycle.Count - 1; c++) { for (int i = 0; i < g.getV(); i++) { if (g.getVetrx(i) == cycle.ElementAt(c)) { g.getVetrx(i).Electricity = electry; if (g.getVetrx(i).Resistance != 0)//不是电线或者电池的情况下计算电压。 { g.getVetrx(i).Voltage = electry * g.getVetrx(i).Resistance; } Console.WriteLine("发电中,元器件" + i + "电流为:" + electry + "电压为:" + g.getVetrx(i).Voltage); for (int j = 0; j < g.getVetrx(i).adj.Count; j++) { g.getVetrx(i).adj[j].Electricity = electry; } } } } }