条条大路通罗马 - 华为笔试题目

来源:互联网 发布:mac automator 自动化 编辑:程序博客网 时间:2024/05/17 01:10

题目主干:

// 题目本身不难,就是一个深度优先搜索// 但是-网上有一些博客给出的是错误答案// 做这个深度优先搜索的关键问题,在于如何避免重新去节点,而不是去避免已经走过的路// 在一次向下的深度搜索过程中,不能返回已经走过的节点// 但是在完成一次到底的DFS后,在返回时必须重置 “走过”状态// 1 -》 2 —》3// 1-》4-》3 是两条一样的路径#include<iostream>  #include<string>  #include <set>using namespace std;  int map[10][10];int N,A,B;int visited[10];  //用于记录已经走过的节点int solve(int start,int end){    int cnt = 0;    visited[start] = 1;    for(int i = 0; i< N; i++)    {        if( i == start)  // 不能从 a-》a                continue;        if( map[start][i] == 1 && visited[i] != 1)        {            if( i == end )  //抵达终点后,不继续向下搜索                cnt++;            else            {                map[start][i] = 0;                cnt += solve(i,end);                map[start][i] = 1;            }        }    }    visited[start] = 0;    return cnt;}int main()  {       while(cin>>N>>A>>B)    {        for(int i=0;i<N;i++)          {            for(int j=0;j<N;j++)              {                cin>>map[i][j];    // CIN DATA              }           }        memset(visited, 0 , 10*sizeof(int));        cout<<solve(A,B)<<endl;     }      return 0;  }  
0 0
原创粉丝点击