1). (7 pts)
Using adjacency matrix M
for( i = 1; i <= V; i++)
for( j = 1; j <= V; j++)
for(k = 1; k <= V; k++)
{
if( i != j != k && M[i,j] == 1 && M[j,k] == 1 && M[k,i] == 1)
return TRUE;
}
Complexity: nested loop will be executed in O(V
3
)
2). (13 pts)
Using adjacency list
For every edge e = (i, j), check the adjacency lists of vertex i and vertex j to see if the two lists
have a common vertex k, i.e. vertex k appears both in the adjacency lists of i and j.
Implementation detail: We maintain a bit vector BV of size V. When checking adjacency lists of
vertex i, we set BV[x] = 1 if vertex x appears in the list, BV[x] = 0 otherwise. Then we check
adjacency lists of vertex j to see if there is any vertex y that BV[y] = 1, if so, y is the common
vertex of the two lists.
Complexity: for every edge, the processing time is at most 2*V1 as the max degree of any
vertex is V1, so the total time complexity is O(V*E)
Common mistake:
DFS on G, when encountering a back edge, check if the cycle is of length 3.
counter example:
This preview has intentionally blurred sections. Sign up to view the full version.
View Full Document
This is the end of the preview.
Sign up
to
access the rest of the document.
 Spring '08
 Hart,G
 Algorithms, Graph Theory, adjacency matrix, Adjacency list, 7 pts, 13 pts, M. P

Click to edit the document details