我正在开发一个项目,以找到2d阵列(200 * 250)中50000点的最短路径。为了简单起见我只用2 * 2开始。 从点我可以去N,W,E,S(没有获得矩阵) 我有3个2d阵列。 Map [] [] =它保存0-255的二进制值 已知[] [] = 0或1. 1表示它找到了该点的最短路径。在开始时所有值都是0。 Dist [] [] =最短路径的目的地。在开始时所有值都是9999 我有三个函数,一个是dijkstra()。
void dijkstra(){
dist[0][0]=0;
int i,j,counter=0;
while(counter<=9){
if(counter<9){
cout<<"counter: "<<counter<<endl;
}
returnmin2(0,0);
known[x][y]=1;
returnS(x);
returnN(x);
returnE(y);
returnW(y);
if(s!=-1){
if(known[s][y]==0){
cost=sqrt(1+(pow((map[s][y]-map[s-1][y]),2.0)));
cost1=cost+dist[s-1][y];
if(cost1<dist[s][y]){
dist[s][y]=cost1;
path[s][y]=150;
cout<<"Distance: "<<dist[s][y]<<endl;
}
}
}
if(n!=-1){
if(known[n][y]==0){
cost=sqrt(1+(pow((map[n][y]-map[x][y]),2.0)));
cost1=cost+dist[n+1][y];
if(cost1<dist[n][y]){
dist[n][y]=cost1;
path[n][y]=50;
cout<<"Distance: "<<dist[x][y]<<endl;
}
}
}
if(e!=-1){
if(known[x][e]==0){
cost=sqrt(1+(pow((map[x][e]-map[x][e-1]),2.0)));
cost1=cost+dist[x][e-1];
if(cost1<dist[x][e]){
dist[x][e]=cost1;
path[x][e]=100;
cout<<"Distance: "<<dist[x][w]<<endl;
}
}
}
if(w!=-1){
if(known[x][w]==0){
cost=sqrt(1+(pow((map[x][w]-map[x][w+1]),2.0)));
cost1=cost+dist[x][w+1];
float d= dist[x][w+1];
if(cost1<dist[x][w]){
dist[x][w]=cost1;
path[x][w]=200;
cout<<"Distance: "<<dist[x][w]<<endl;
}
}
}
counter++;
}
}
函数returnmin
找到未知的最小距离。
float returnmin2(int i,int j){
float min2,q=0;
for(i;i<3;i++){
for(j;j<3;j++){
float q=dist[i][j];
if((i==0) && (j==0)){
min2=q;
x=i;
y=j;
}
if(q<min2){
min2=q;
x=i;
y=j;
}
}
}
if(known[x][y]==0){
x=x;
y=y;
}
else if(known[x][y]!=0){
if(y<2){
returnmin2(x,y+1);
}
else {
returnmin2(x+1,0);
}
}
}
returnS,N,W,E是告诉我们走哪条路的函数
int returnS(int v){
if(v!=2){
s=v+1;
}
else{
s=-1;
}
}
由于某种原因,当计数器到达时,程序停止工作。我现在仍然确定原因。一开始它工作正常。但出于某种原因,当它到达2,2点时,它会错过。如果您希望我包含openfile函数和main
,请告诉我