Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <ctime>
- #include <malloc.h>
- #include <cstdlib>
- using namespace std;
- struct node{
- int info;
- struct node *next;
- };
- class stack{
- struct node *top;
- public:
- stack();
- void push(int);
- int pop();
- bool isEmpty();
- void display();
- };
- stack::stack(){
- top = NULL;
- }
- void stack::push(int data){
- node *p;
- if((p=(node*)malloc(sizeof(node)))==NULL){
- cout<<"Memory Exhausted";
- exit(0);
- }
- p = new node;
- p->info = data;
- p->next = NULL;
- if(top!=NULL){
- p->next = top;
- }
- top = p;
- }
- int stack::pop(){
- struct node *temp;
- int value;
- if(top==NULL){
- cout<<"\nThe stack is Empty"<<endl;
- }else{
- temp = top;
- top = top->next;
- value = temp->info;
- delete temp;
- }
- return value;
- }
- bool stack::isEmpty(){
- return (top == NULL);
- }
- void stack::display(){
- struct node *p = top;
- if(top==NULL){
- cout<<"\nNothing to Display\n";
- }else{
- cout<<"\nThe contents of Stack\n";
- while(p!=NULL){
- cout<<p->info<<endl;
- p = p->next;
- }
- }
- }
- class Graph {
- private:
- int n;
- int **A;
- public:
- Graph(int size = 2);
- ~Graph();
- bool isConnected(int, int);
- void addEdge(int x, int y);
- void DFS(int , int);
- };
- Graph::Graph(int size) {
- int i, j;
- if (size < 2) n = 2;
- else n = size;
- A = new int*[n];
- for (i = 0; i < n; ++i)
- A[i] = new int[n];
- for (i = 0; i < n; ++i)
- for (j = 0; j < n; ++j)
- A[i][j] = 0;
- }
- Graph::~Graph() {
- for (int i = 0; i < n; ++i)
- delete [] A[i];
- delete [] A;
- }
- bool Graph::isConnected(int x, int y) {
- return (A[x-1][y-1] == 1);
- }
- void Graph::addEdge(int x, int y) {
- A[x-1][y-1] = A[y-1][x-1] = 1;
- }
- void Graph::DFS(int x, int required){
- int qq=0;
- stack s;
- bool *visited = new bool[n+1];
- int i;
- for(i = 0; i <= n; i++)
- visited[i] = false;
- s.push(x);
- visited[x] = true;
- if(x == required) return;
- //cout << "Depth first Search starting from vertex ";
- //cout << x << " : " << endl;
- while(!s.isEmpty()){
- int k = s.pop();
- if(k == required) break;
- // cout<<k<<" ";
- for (i = n; i >= 0 ; --i)
- if (isConnected(k, i) && !visited[i]) {
- s.push(i);
- visited[i] = true;
- qq++;
- }
- }
- //cout<<endl;
- cout<<qq-1;
- delete [] visited;
- }
- int main(){
- int m,n,first,last;
- cin >> n >> m;
- m++;
- Graph g(m);
- for (int i=0; i<m-1; i++)
- {
- int a,b;
- cin >> a >> b;
- if (i==1)
- {
- a = first;
- b = last;
- }
- g.addEdge(a, b);
- }
- g.DFS(first, last);
- /*
- Graph g(14);
- g.addEdge(1, 2);
- g.addEdge(1, 5);
- g.addEdge(1, 7);
- g.addEdge(1, 8);
- g.addEdge(2, 3);
- g.addEdge(2, 5);
- g.addEdge(3, 4);
- g.addEdge(5, 6);
- g.addEdge(5, 7);
- g.addEdge(6, 9);
- g.addEdge(6, 10);
- g.addEdge(7, 8);
- g.addEdge(9, 10);
- g.DFS(1, 2);
- */
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement