public bool addResults(Floor f) { ReturnBestPath bpath = new ReturnBestPath(); ReturnLongestPath lpath = new ReturnLongestPath(); Edge PrevEdge; Edge GoalEdge; bool turns = false; int turnsCount = 0; int totalLen = 0; //bestpath List <Edge> BestPathE = new List <Edge>(); BestPathE.AddRange(bpath.RunAlg(f)); List <Cell> BestPathC = new List <Cell>(); BestPathC = bpath.BestPath; totalLen = bpath.bestPathLen; //longestPath int LongestPath = 0; lpath.RunAlg(f); LongestPath = lpath.LongestPath; LongestRoomDist.Add(LongestPath); /* * //reset path if it Is > size * if((float)LongestPath > (float)Xsize * (float)Ysize * 0.75f) * { * //modify main so that if we return false we rebuild the floor * return false * } */ if ((f.floorNumber % 2) == 0) //POSSIBLE BROKE? { //first floor, and odd floors //Debug.Log("first floor"); PrevEdge = new Edge(null, null, 0, Ysize, false); // GoalEdge = new Edge(null, null, Xsize, 0, false); } else { //Debug.Log("odd floor"); PrevEdge = new Edge(null, null, Xsize, Ysize, false); //GoalEdge = new Edge(null,null, 0, 0, false); } //check v first edge for (int c = 1; c < BestPathE.Count; c++) //was C { if (BestPathE[c].getUp() != turns) { turns = BestPathE[c].getUp(); turnsCount = turnsCount + 1; } else { if (PrevEdge.getX() == BestPathE[c].getX() && BestPathE[c].getUp() == false) { turnsCount = turnsCount + 2; } else if (PrevEdge.getY() == BestPathE[c].getY() && BestPathE[c].getUp() == true) { turnsCount = turnsCount + 2; } } PrevEdge = BestPathE[c]; } //Debug.Log(turnsCount); totalRooms.Add(f.cells.Count); visitedRooms.Add(BestPathC.Count); Turns.Add(turnsCount); Length.Add(totalLen); //for some reason the 2nd last length is alsways +1 and the last is always -1 //Debug.Log(totalLen); //add TIME! //Debug.Log("LEN:" + totalLen); return(true); }
public List <Edge> RunAlg(Floor cur_floor) { ///ISSUUE WITH THE ODD FLOORS AND THE STARTEDGE Cell Startcell = cur_floor.cells[0]; Cell GoalCell = cur_floor.cells[0]; ReturnBestPath bpath = new ReturnBestPath(); List <Cell> BestPath = new List <Cell>(); bpath.RunAlg(cur_floor); BestPath = bpath.BestPath; if ((cur_floor.floorNumber % 2) == 0) { //Debug.Log("FIRST"); //if its an even floor startedge = new Edge(Startcell, Startcell, 0, cur_floor.getY() - 1, false); goaledge = new Edge(Startcell, Startcell, cur_floor.getX(), 0, false); foreach (Cell c in cur_floor.cells) { if (c.YLoc > Startcell.YLoc && c.XLoc == 0) { Startcell = c; } } foreach (Cell c in cur_floor.cells) { if (c.XLoc + c.Xsize == cur_floor.getX() && c.YLoc == 0) { GoalCell = c; } } } else { //odd floor //Debug.Log("SECOND"); int counter = 0; startedge = new Edge(Startcell, Startcell, cur_floor.getX(), cur_floor.getY() - 1, false); goaledge = new Edge(Startcell, Startcell, 0, 0, false); foreach (Cell c in cur_floor.cells) { if (c.YLoc + c.XLoc > counter) { counter = c.YLoc + c.XLoc; Startcell = c; } } foreach (Cell c in cur_floor.cells) { if (c.XLoc == 0 && c.YLoc == 0) { GoalCell = c; } } } // Debug.Log("goal = " + GoalCell.XLoc + "," + GoalCell.YLoc); foreach (Cell c in cur_floor.cells) { if ((c != GoalCell || c != Startcell) && !BestPath.Contains(c)) { List <Cell> curPath = new List <Cell>(); List <Cell> DefaultPath = new List <Cell>(); paths = new List <List <Cell> >(); visited = new List <List <int> >(); DefaultPath.Add(Startcell); paths.Add(DefaultPath); List <Edge> newList = new List <Edge>(); newList.Add(startedge); //Debug.Log("start"); Dfirst(Startcell, GoalCell, c, DefaultPath, newList, cur_floor, 0); //Debug.Log("SEARCH FINISHED"); } } LongestPath = LongestPath + 1; //so we step inside the last cell. return(visitedEdges); }