Я решал BFS
проблема. Я использовал PriorityQueue, но у меня был неправильный ответ, затем я использовал LinkedList
, у меня были права. Я не могу найти разницу между ними. Вот и коды. Почему оба ответа различны?приоритетная очередь vs связанный список java
Code1:
LinkedList q=new LinkedList();
q.add(src);
dist[src]=0;
visited[src]=1;
while(!q.isEmpty()){
u=(int)(Integer) q.remove(0);
for (int k = 0; k < n; k++) {
if(a[u][k]==1 && visited[k]==0)
{
dist[k]=dist[u]+1;
q.add(k);
visited[k]=1;
}
}
}
Code 2:
PriorityQueue<Integer> q= new PriorityQueue<>();
q.add(src);
dist[src]=0;
visited[src]=1;
while(!q.isEmpty()){
u=q.remove();
for (int k = 0; k < n; k++) {
if(a[u][k]==1 && visited[k]==0)
{
dist[k]=dist[u]+1;
q.add(k);
visited[k]=1;
}
}
}
Кроме того, когда я использовал смежность List вместо матрицы смежности, реализация очереди Приоритета дала правильный анс.
Что ваш код пытается сделать? и на какой строке он не делает то, что вы ожидаете, когда смотрите на него в своем отладчике? LinkedList с одним элементом выполняет то же самое, что и PriorityQueue с одним элементом. –
Его простые bfs, чтобы найти расстояние до всех узлов. Я не знаю тестовых случаев. Я тренировался в онлайн-судьях. – vikram
Возможно, вам захотелось [Queue] (https://docs.oracle.com/javase/7/docs/api/java/util/Queue.html), а не 'PriorityQueue'. Должно быть достаточно простым, чтобы измениться. –