马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
98. 所有可达路径// DFS
- #include <bits/stdc++.h>
- using namespace std;
- vector<vector<int>> result;
- vector<int> path;
- void dfs(const vector<list<int>> &graph, int i, int target) {
- if (i == target) {
- result.push_back(path);
- return;
- }
- for (int nums : graph[i]) {
- path.push_back(nums);
- dfs(graph, nums, target);
- path.pop_back();
- }
- }
- int main() {
- int n, m;
- cin >> n >> m;
- vector<list<int>> graph(n + 1);
- int temp, next;
- for (int i = 0; i < m; i++) {
- cin >> temp >> next;
- graph[temp].push_back(next);
- }
- path.push_back(1);
- dfs(graph, 1, n);
- if (result.size() == 0)
- cout<<-1<<endl;
- for (int i = 0; i < result.size(); i++) {
- for (int j = 0; j < result[i].size() - 1; j++) {
- cout << result[i][j] << " ";
- }
- cout << result[i][result[i].size() - 1] << endl;
- }
- }
复制代码 99. 岛屿数量//。。感觉这题没须要拘泥于用什么搜刮。。
- #include<bits/stdc++.h>
- using namespace std;
- void DFSfindsameIsland(vector<vector<bool>>& finded,const vector<vector<int>>& graph,int a,int b){
- if(a<0||b<0||a>graph.size()-1||b>graph[a].size()-1) return;
- else if(graph[a][b]==0) return;
- else if(graph[a][b]==1){
- if(finded[a][b]==false){
- finded[a][b]=true;
- DFSfindsameIsland(finded,graph,a,b+1);
- DFSfindsameIsland(finded,graph,a+1,b);
- DFSfindsameIsland(finded,graph,a,b-1);
- DFSfindsameIsland(finded,graph,a-1,b);
- }
- else return;
- }
- }
- int main(){
- int i,j;
- cin>>i>>j;
- vector<vector<int>> graph(i,vector<int> (j));
- for(int a=0;a<i;a++){
- for(int b=0;b<j;b++){
- cin>>graph[a][b];
- }
- }
- vector<vector<bool>> finded(i,vector<bool> (j,false));
- int result=0;
- for(int a=0;a<i;a++){
- for(int b=0;b<j;b++){
- if(graph[a][b]==1&&!finded[a][b]){
- result++;
- DFSfindsameIsland(finded,graph,a,b);
- }
- }
- }
- cout<<result<<endl;
- }
复制代码 100. 岛屿的最大面积//偷懒了。随便拿上一题的代码改改就交了
- #include<bits/stdc++.h>
- using namespace std;
- int DFSfindsameIsland(vector<vector<bool>>& finded,const vector<vector<int>>& graph,int a,int b){
- if(a<0||b<0||a>graph.size()-1||b>graph[a].size()-1) return 0;
- else if(graph[a][b]==0) return 0;
- else{
- if(finded[a][b]==false){
- int result=1;
- finded[a][b]=true;
- result+=DFSfindsameIsland(finded,graph,a,b+1);
- result+=DFSfindsameIsland(finded,graph,a+1,b);
- result+=DFSfindsameIsland(finded,graph,a,b-1);
- result+=DFSfindsameIsland(finded,graph,a-1,b);
- return result;
- }
- else return 0;
- }
- }
- int main(){
- int i,j;
- cin>>i>>j;
- vector<vector<int>> graph(i,vector<int> (j));
- for(int a=0;a<i;a++){
- for(int b=0;b<j;b++){
- cin>>graph[a][b];
- }
- }
- vector<vector<bool>> finded(i,vector<bool> (j,false));
- int result=0;int maxaera=0;
- for(int a=0;a<i;a++){
- for(int b=0;b<j;b++){
- if(graph[a][b]==1&&!finded[a][b]){
- maxaera=max(maxaera,DFSfindsameIsland(finded,graph,a,b));
- }
- }
- }
- cout<<maxaera<<endl;
- }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |