Нет необходимости конвертировать. Представьте, что вы находитесь в какой-то точке (i, j). (Я предполагаю, что у вас есть четыре хода, разрешенных с каждого квадрата). Затем вы можете перейти к (i + 1, j), (i, j + 1), (i - 1, j), (i, j - 1), если:
1) Этот индекс находится внутри таблица 2) Этот индекс не обозначен X
Итак, вы указываете позицию квадрата S вашему алгоритму Дейкстры. И каждый раз, когда вы добавляете новый набор разрешенных квадратов в свою структуру данных. Как только вы достигнете положения D, вы распечатаете его.
Кроме того, эта проблема не выглядит взвешенной для меня, поэтому вы можете использовать простое BFS, а также использовать очередь. Но если вы хотите использовать Дийкстра и переходить в разные квадраты, то разные затраты. Вместо очереди вы используете очередь приоритетов. Например, вы можете использовать структуру набора данных, как это:
int dist[][]; // this contains the cost to get to some square
//dist is initialized with a large number
struct node{
int i, j; //location
node(int ii, int jj){
i = ii;
j = jj;
}
bool operator < (node &n)const{ //set in c++ will use this to sort
if(dist[i][j] == dist[n.i][n.j]) return i < n.i || j < n.j; //this is necessary
return dist[i][j] < dist[n.i][n.j];
}
};
set <node> q;
int main(){
//initialized dist with large number
dist[S.i][S.j] = 0; //we start from source
q.push(node(S.i, S.j));
while(true){
//pick the first element in set
//this element has the smallest cost
//update dist using this node if necessary
//for every node that you update remove from q and add it again
//this way the location of that node will be updated in q
//if you see square 'D' you are done and you can print dist[D.i][D.j]
}
return 0;
}
гм, может быть, это не то место, чтобы задать такой вопрос (но что я не знаю ..) пытаются изменить вопрос размещение кода вы концентрируетесь на одиночной проблеме .. это слишком большая и слишком теоретическая .. – nayana
также дайте нам, пожалуйста, больше информации о вашей проблеме ... например: могу ли я пойти по диагонали? так что скажем от D по сравнению с 4 до S? или только вертикальные и горизонтальные? Далее: вы хотите работать с 2D-массивом или notelist adj.matrix/list или как связанный список (узлы, которые подключены) ... – Thomas
Кстати: вы только хотите знать, как конвертировать? или у вас также есть проблемы с программой dijkstra? – Thomas