Skip to content

Commit 7fc9db9

Browse files
committed
add
1 parent fa34893 commit 7fc9db9

File tree

1 file changed

+180
-0
lines changed

1 file changed

+180
-0
lines changed

016 - Graphs/Graph Practice.cpp

Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,180 @@
1+
#include<iostream>
2+
#include<queue>
3+
#include<unordered_map>
4+
using namespace std;
5+
6+
bool hasPathDFS(int** edges,int n,int sv,int ev,bool* visited){
7+
if(sv==ev) return true;
8+
visited[sv]=true;
9+
for(int i=0;i<n;i++){
10+
if(i==sv) continue;
11+
if(edges[sv][i]==1 && !visited[i]){
12+
if(hasPathDFS(edges,n,i,ev,visited)) return true;
13+
}
14+
}
15+
return false;
16+
}
17+
18+
bool hasPathBFS(int** edges,int n,int sv,int ev,bool* visited){
19+
queue<int> pending;
20+
if(sv==ev) return true;
21+
pending.push(sv);
22+
visited[sv]=true;
23+
while(pending.size()!=0){
24+
int temp = pending.front();
25+
pending.pop();
26+
if(temp==ev) return true;
27+
for(int i=0;i<n;i++){
28+
if(i==temp) continue;
29+
if(edges[temp][i]==1 && !visited[i]){
30+
pending.push(i);
31+
visited[i]=true;
32+
}
33+
}
34+
}
35+
return false;
36+
}
37+
38+
vector<int> getPathDFS(int** edges,int n,int sv,int ev,bool* visited){
39+
vector<int> ans;
40+
if(sv==ev){
41+
visited[sv]=true;
42+
ans.push_back(ev);
43+
return ans;
44+
}
45+
visited[sv]=true;
46+
for(int i=0;i<n;i++){
47+
if(sv==i) continue;
48+
if(!visited[i] && edges[sv][i]){
49+
vector<int> temp = getPathDFS(edges,n,i,ev,visited);
50+
if(temp.size()!=0){
51+
temp.push_back(sv);
52+
return temp;
53+
}
54+
}
55+
}
56+
return ans;
57+
}
58+
59+
vector<int> getPathBFS(int** edges,int n,int sv,int ev,bool* visited){
60+
queue<int> pending;
61+
vector<int> ans;
62+
unordered_map<int,int> map;
63+
if(sv==ev) return {ev};
64+
pending.push(sv);
65+
visited[sv]=true;
66+
bool flag = true;
67+
while(pending.size()!=0){
68+
int temp = pending.front();
69+
pending.pop();
70+
for(int i=0;i<n;i++){
71+
if(i==temp) continue;
72+
if(edges[temp][i]==1 && !visited[i]){
73+
if(i==ev) flag=false;
74+
map[i]=temp;
75+
pending.push(i);
76+
visited[i]=true;
77+
}
78+
}
79+
if(flag==false){
80+
int temp=ev;
81+
while(temp!=sv){
82+
ans.push_back(temp);
83+
temp=map[temp];
84+
}
85+
ans.push_back(sv);
86+
break;
87+
}
88+
}
89+
return ans;
90+
}
91+
92+
void DFSprint(int** edges,int n,int sv,bool* visited){
93+
cout<<sv<<endl;
94+
visited[sv]=true;
95+
for(int i=0;i<n;i++){
96+
if(i==sv) continue;
97+
if(edges[sv][i]==1 && !visited[i]){
98+
DFSprint(edges,n,i,visited);
99+
}
100+
}
101+
}
102+
103+
void BFSprint(int** edges,int n,int sv,bool* visited){
104+
queue<int> pending;
105+
pending.push(sv);
106+
visited[sv]=true;
107+
while(pending.size()!=0){
108+
int temp = pending.front();
109+
pending.pop();
110+
cout<<temp<<endl;
111+
for(int i=0;i<n;i++){
112+
if(i==temp) continue;
113+
if(edges[temp][i]==1 && !visited[i]){
114+
pending.push(i);
115+
visited[i]=true;
116+
}
117+
}
118+
}
119+
}
120+
121+
void isConnected(int** edges,int n,int sv,bool* visited){
122+
visited[sv]=true;
123+
for(int i=0;i<n;i++){
124+
if(i==sv) continue;
125+
if(edges[sv][i]==1 && !visited[i]){
126+
isConnected(edges,n,i,visited);
127+
}
128+
}
129+
}
130+
131+
132+
void allConnected(int** edges,int n,int sv,bool* visited,vector<int> &v){
133+
visited[sv]=true;
134+
v.push_back(sv);
135+
for(int i=0;i<n;i++){
136+
if(sv==i) continue;
137+
if(!visited[i] && edges[sv][i]==1){
138+
allConnected(edges,n,i,visited,v);
139+
}
140+
}
141+
}
142+
143+
int main(){
144+
int n;
145+
int e;
146+
cin>>n>>e;
147+
int **edges = new int*[n];
148+
for(int i=0;i<n;i++){
149+
edges[i]=new int[n];
150+
for(int j=0;j<n;j++){
151+
edges[i][j]=0;
152+
}
153+
}
154+
155+
for(int i=0;i<e;i++){
156+
int f,s;
157+
cin>>f>>s;
158+
edges[f][s]=1;
159+
edges[s][f]=1;
160+
}
161+
162+
bool* visited = new bool[n];
163+
for(int i=0;i<n;i++){
164+
visited[i]=false;
165+
}
166+
167+
168+
for(int i=0;i<n;i++){
169+
if(visited[i]==false){
170+
vector<int> smallAns;
171+
allConnected(edges,n,i,visited,smallAns);
172+
for(auto m:smallAns) cout<<m<<" ";
173+
cout<<endl;
174+
}
175+
}
176+
177+
178+
179+
return 0;
180+
}

0 commit comments

Comments
 (0)