void Save007(Graph G)
{ for(each V in G){
if(!visited[V]&&FirstJump(v)}{
answer=DFS(V);
if(answer==YES) break;
}
}
if(answer==YES) output("yes");
else output("NO");
}
int DFS(Vertex V)
{ visited[V]=true;
if(IsSafe(v)) answer =YES;
else{
for(each W in G)
if(!visited[W]&&Jump(v,w)){
answer=DEF(W);
if(answer==YES) break;
}
}
return answer;
}
算法思路:
对每个节点,进行广度优先搜索
搜索过程中累计访问的节点数
需要记录“层”数,仅计算6层以内的节点数
void SDS()
{
for(each V in G){
count=BFS(V);
Output(Count/N);
}
}
int BFS(Vertex V)
{ visited[V]=true;count=1;
level=0;last=v;
Enqueue(V,Q);
while(!IsEmpty(Q)){
v=Dequeue(Q);
for(V的每个邻接点w)
if(!visited[W]){
visited[W]=true;
Enqueue(W,Q);Count++
tail=w;
}
if(v==last){
level++;last=tail;
}
if(level==6) break;
}
return count;
}