问有几种新增航班方法可以去目标岛(gpt对回溯的条件判断不严苛,容易漏)

有n个岛,m班双向航线,航线用x,y表示x和y两个岛之间是有航班的,我要从s岛去t岛,请问是否可以?c++,DFS

输入

3 2 0 2

0 1

1 2

输出

2

c 复制代码
bool dfs(int u, int t, vector<bool>& visited, vector<vector<int>>& adj) {
  // 到达目的地
  if (u == t) {
    return true;
  }

  visited[u] = true;
  for (int v : adj[u]) {
    if (!visited[v]) {
      if (dfs(v, t, visited, adj)) {
          //回溯 1!!!!!!!!!!!!!!!
        visited[u] = false;
        return true;
      }
    }
  }

  // 回溯 2!!!!!!!!!!!!!!!!!!!
  visited[u] = false;
  return false;
}


int main() {
  string str;
  freopen("test.txt","r",stdin);
  int n, m, s, t;
  cin >> n >> m >> s >> t;

  // 构建邻接表
  vector<vector<int>> adj(n);
  for (int i = 0; i < m; i++) {
    int x, y;
    cin >> x >> y;
    adj[x].push_back(y);
    adj[y].push_back(x);
  }

  // 深度优先搜索
  int count = 0;
  int res = 0;
  vector<bool> visited(n, false);
  for (int i = 0; i < n - 1; i++) {
    for(int j = i+1; j < n; j++){
        adj[i].push_back(j);
        adj[j].push_back(i);
        for(auto x : adj){
            for(auto y : x){
                cout << y << " ";
            }
            cout <<endl;
        }

        if(dfs(s, t, visited, adj)){
            cout <<" succeed" <<endl;
            cout << "i = " <<i <<endl;
            cout << "j = " <<j <<endl;
            res++;
        }
        cout <<"-------"<<endl;
        adj[i].pop_back();
        adj[j].pop_back();
    }
  }


  // 输出结果
  cout << res << endl;

  return 0;
}
相关推荐
徐小夕8 小时前
花了一周,3亿tokens,我开源了一款 Word 文档智能审查平台,文稿自动质检+可视化分析,告别低效人工审核
前端·算法·github
可编程芯片开发10 小时前
UPFC统一潮流控制器的simulink建模与仿真
算法
小小仙子10 小时前
矢量网络分析仪如何测试S参数的?
人工智能·算法·机器学习
中微极客12 小时前
降维算法75倍加速:从PCA到稀疏字典学习的工程实践
人工智能·学习·算法
storyseek12 小时前
前缀和实现Kogge-Stone算法
数据结构·算法
元Y亨H13 小时前
开发者必须掌握的十大核心算法
算法
元Y亨H13 小时前
深度解构:数据结构与算法的理论基石与工程演进
数据结构·算法
元Y亨H13 小时前
数据结构与算法的通俗指南
数据结构·算法
2301_7644413313 小时前
用动力学系统(微分方程)为 Kernberg 的客体关系单元提供数学化的操作定义,把“自体—客体“这对心理结构建模成一个二维耦合系统
数据结构·python·算法·数学建模