3.12笔试问题一
根据数据构建图,利用深搜+回溯求出由出发点x至目的地y的最短距离。若不存在路径则返回-1,存在则返回最小距离。
打卡一篇小笔记,有不足之处还希望各位提出。
#include<bits/stdc++.h> using namespace std; void dfs(vector<vector<int>>& G,vector<bool>& visited,int y,int& cur,int& index,int& res) { if(index == y){ res = min(res,cur); return; } if(visited[index]) return; visited[index] = true; for(int i = 1;i < G[index].size();i++) { if(!visited[i] && G[index][i] == 1){ cur++; dfs(G,visited,y,cur,i,res); cur--; } } return; } int main() { int n,m; cin>>n>>m; int q; vector<vector<int>> G(n+1,vector<int>(n+1)); while(m--) { int x,y; cin>>x>>y; G[x][y] = 1; } for(int i = 1;i < n+1;i++) { for(int j = 1;j < n+1;j++) { cout<<G[i][j]; } cout<<endl; } cin>>q; while(q--) { int x,y; cin>>x>>y; int res = 65535; int cur= 0; int i; vector<bool> visited(n+1,false); for(i = 1; i < n+1 ;i++){ if(i == y && G[x][y] == 1){ res = 1; break; } if(!visited[i] && G[x][i] == 1) { cur = 1; dfs(G,visited,y,cur,i,res); } } if(i == n+1 && res == 65535) cout<<-1<<endl; else cout<<res<<endl; } return 0; }
全部评论
(1) 回帖