[Serializable]
public class Vpoint
{
public int ID {get; set;}
public int X {get; set;}
public int Y {get; set;}
public bool Isfind {get; set;}
Public list<int> dependences {get; set;} The point ID associated with the point
}
Private voidFindpath () {Vpoint V1=NewVpoint () {ID =0, X =0, Y = -, dependences =Newlist<int> () {2,1 } }; Vpoint v2=NewVpoint () {ID =1, X = -, Y =0, dependences =Newlist<int> () {0,3,2 } }; Vpoint v3=NewVpoint () {ID =2, X = -, Y = -, dependences =Newlist<int> () {0,1,4 } }; Vpoint V4=NewVpoint () {ID =3, X = +, Y =0, dependences =Newlist<int> () {1,4,5 } }; Vpoint V5=NewVpoint () {ID =4, X = +, Y = -, dependences =Newlist<int> () {2,3,5 } }; Vpoint V6=NewVpoint () {ID =5, X = -, Y = -, dependences =Newlist<int> () {3,4 } }; List<VPoint> points =NewList<vpoint>() {v1, V2, v3, v4, V5, V6}; Vpoint Start=v1; Vpoint End=V6; List<VPoint> Resultpoint =NewList<vpoint>(); Findpoint (Clone (points), start, end, Resultpoint); foreach(varIteminchPaths) { stringPath =""; foreach(varPointinchItem) {Path+ = Point.id +"="; } Console.WriteLine (path); //print path } Console.WriteLine (count); } intCount =0; List<IList<VPoint>> Paths =NewList<ilist<vpoint>>();//global variable, save all pathsPrivate voidFindpoint (list<vpoint> points, vpoint start, Vpoint end, list<vpoint>resultpoint) {Resultpoint. ADD (start); intindex = points. IndexOf (points. Where (p = = P.id = = start.id). ToList () [0]); Points[index]. Isfind=true;//tags have been foundif(Start. Dependences.contains (end.id))//if it's the end{resultpoint. ADD (end); Paths.add (Resultpoint); int_index = points. IndexOf (points. Where (p = = P.id = = end.id). ToList () [0]); Points[_index]. Isfind=true; } Else { foreach(varIteminchstart. dependences) {varNewstart = Points. Where (p = p.id = = Item && P.isfind = =false). ToList (); if(Newstart. Count >0) {Count++; List<VPoint> newpoints =Clone (Resultpoint); Findpoint (Clone (points), newstart[0], end, newpoints); } } } } Public StaticT clone<t>(T realobject)//deep copy {using(Stream Objectstream =NewMemoryStream ()) {IFormatter Formatter=NewBinaryFormatter (); Formatter. Serialize (Objectstream, realobject); Objectstream.seek (0, Seekorigin.begin); return(T) formatter. Deserialize (Objectstream); } }
A simple graph search algorithm