Разработка программы поиска минимального пути в лабиринте
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
//генерация лабиринта(int i=0;i<sX;i++)(int j=0;j<sY;j++)
{ rnd=rand()%4;[i][j]=rnd; }(int t=0;tstop;0;
}Volna(int* lab,int kol)
{lb[sX][sY];//модифицированая копия лабиринтаNi=0, x=0, y=0, copX, copY;//Ni - кольво итераций, x,y,copX,copY - для хранения координатmin=300, copMin=300; //для поиска минимального путиwork=true; //для избежания зацикливания
//заполнения модифицированого лабиринта для волнового метода(int i=0;i<sX;i++)(int j=0;j<sY;j++)
{(*(lab+j+i*sY)/3==0)lb[i][j]=254;(*(lab+j+i*sY)==3)lb[i][j]=255;(*(lab+j+i*sY)==4)
{(kol==2)[i][j]=253;[i][j]=0;-;
}
}
//формирование волны(work)
{(int k=0;k<sX;k++)(int l=0;l<sY;l++)(lb[k][l]==Ni)
{(l+1!=sY)
{(lb[k][l+1]==254)[k][l+1]=Ni+1;(lb[k][l+1]==253){x=k;y=l+1;work=false;}
}(k+1!=sX)
{(lb[k+1][l]==254)[k+1][l]=Ni+1;(lb[k+1][l]==253){x=k+1;y=l;work=false;}
}(l-1!=-1)
{(lb[k][l-1]==254)[k][l-1]=Ni+1;(lb[k][l-1]==253){x=k;y=l-1;work=false;}
}(k-1!=-1)
{(lb[k-1][l]==254)[k-1][l]=Ni+1;(lb[k-1][l]==253){x=k-1;y=l;work=false;}
}
}++;(Ni==250)work=false;
}
//поиск минимального пути(Ni!=250)
{(copMin!=0)
{(y+1!=sY)(min>lb[x][y+1])
{=lb[x][y+1];=y+1;=x;
}(y-1!=-1)(min>lb[x][y-1])
{=lb[x][y-1];=y-1;=x;
}(x+1!=sX)(min>lb[x+1][y])
{=lb[x+1][y];=x+1;=y;
}(x-1!=-1)(min>lb[x-1][y])
{=lb[x-1][y];=x-1;=y;
}=copX; y=copY; copMin=min; min=300; *(lab + y + x*sY)=5;
}
*(lab + y + x*sY)=4;
}return false;true;
}LabOut(int* lab,char* bl)
{(int i=0;i<sX;i++)
{(int j=0;j<sY;j++)<<bl[*(lab+j+i*sY)];<<endl;
}<<"--------------------------------------------------------------------------------";
}Prior(int* lab,int kol)
{x, y, startX, startY, copX, copY,stop=0; //хранение координатlb[sX][sY];//модифицированая копия лабиринтаmin=300;//для нахождения минимального приоритетаwork=true;//для избежания зацикливания
//создания модифицированого лабиринта под метод приоритетов(int i=0;i<sX;i++)(int j=0;j<sY;j++)
{((*(lab+j+i*sY)/3==0) || (*(lab+j+i*sY)==5)){lb[i][j]=0;*(lab + j + i*sY)=0;}(*(lab+j+i*sY)==3)lb[i][j]=255;(*(lab+j+i*sY)==4)
{(kol==2)
{[i][j]=0;=i;startY=j;
}[i][j]=254;-;
}
}=startX; y=startY;//хранение точки входа
//реализация алгоритма поиска(work)
{(y+1!=sY)
{(lb[x][y+1]==254)
{work=false; min=0;copY=y+1;copX=x;}(min>lb[x][y+1])
{min=lb[x][y+1];copY=y+1;copX=x;}
}(y-1!=-1)
{(lb[x][y-1]==254)
{work=false; min=0;copY=y-1; copX=x;}(min>lb[x][y-1])
{min=lb[x][y-1]; copY=y-1; copX=x;}
}(x+1!=sX)
{(lb[x+1][y]==254)
{work=false; min=0;copX=x+1; copY=y;}(min>lb[x+1][y])
{min=lb[x+1][y]; copX=x+1; copY=y;}
}(x-1!=-1)
{(lb[x-1][y]==254)
{work=false; min=0;copX=x-1; copY=y;}(min>lb[x-1][y])
{min=lb[x-1][y]; copX=x-1; copY=y;}
}++; lb[x][y]++; x=copX; y=copY; min=300; *(lab + y + x*sY)=5;(stop==250)work=false;
}
*(lab + startY + startX*sY)=*(lab + y + x*sY)=4;(stop==250)work=true;!work;
}