2015-04-02 24 views
1

在DFS遍歷中,遍歷adjlist以獲取下一個未訪問頂點(由'1'標記爲int visit[100]),並通過從棧(= i)彈出下一個值進行回溯。這兩種說法如何不同?

第一個給我正確的答案,第二個崩潰了程序。

2條語句如何不同?

array=graph* //psuedo code 
link=adjList* 
head=adjListNode* 

while(temp!=NULL)   //temp=array->link[i].head->next 
    if(visit[temp->key]==1) //checking if visited 
      temp=temp->next; 
     else 
      break; 

while(visit[temp->key]==1 && temp!=NULL) 
     temp=temp->next; 
+0

試試這個'while(temp!= NULL && visit [temp-> key] == 1)'。首先檢查不是'空'狀態,然後檢查訪問條件,它可能工作。 – Himanshu 2015-04-02 11:54:08

+0

是的,這解決了這個問題。謝謝你Himanshu。 – purudpd 2015-04-02 12:20:41

+0

您的歡迎。我保留這個作爲我對這個問題的答案。 – Himanshu 2015-04-02 12:22:18

回答

1

使用

while(temp!=NULL && visit[temp->key]==1) 

首先,你需要檢查temp!=NULL然後,如果條件爲真,您可以檢查
visit[temp->key]==1

正如你所使用的條件首先檢查visit[temp->key]==1不檢查溫度是否爲NULL,這是導致崩潰。
它的工作原理類似於您首先檢查的第一個條件while(temp!=NULL)條件然後if(visit[temp->key]==1)