Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdio.h"
- #include "conio.h"
- #include "malloc.h"
- #define MAX 100
- struct node
- {
- int key;
- struct node *next;
- };
- struct node *a[MAX];
- struct node *z;
- int val[MAX];
- int n;
- int id = 0;
- void init(int r)
- {
- int i;
- z =(struct node *) malloc(sizeof *z);
- z->key = -1;
- z->next = z;
- for(i = 1; i <= r; ++i)
- {
- a[i] =(struct node *) malloc(sizeof *a[i]);
- a[i]->key = -1;
- a[i]->next = z;
- }
- }
- int index(char c)
- {
- int t;
- t = c - 'A' + 1;
- return t;
- }
- void show(struct node *t)
- {
- struct node *k;
- k = t->next;
- while(k != z)
- {
- printf("%3d", k->key);
- k = k->next;
- }
- }
- void insert(int x, struct node *q, struct node *k)
- {
- struct node *p;
- q->key = x;
- q->next = z;
- p = k;
- if(p->next == z)
- {
- k->next = q;
- }
- else
- {
- while(p->next != z)
- {
- p = p->next;
- }
- p->next= q;
- }
- }
- void vist(int k)
- {
- struct node *t;
- val[k] = ++id;
- //printf("\n Tada %d", val[k]);
- printf("\n\nVisited vertex %d", k);
- for(t = a[k]->next; t!= z; t = t->next)
- {
- if(val[t->key] == 0)
- vist(t->key);
- }
- }
- void listdfs()
- {
- int i;
- for(i = 1; i <= n; ++i)
- {
- val[i] = 0;
- }
- for(i = 1; i <= n; ++i)
- {
- if(val[i] == 0) vist(i);
- }
- }
- void del_node(int x, int y)
- {
- struct node *t;
- struct node *k;
- struct node *m;
- k = a[y];
- t = a[x];
- if(k->key == x)
- {
- m = k;
- k = k->next;
- free(m);
- }
- else
- {
- while(k->next->key != x)
- {
- k = k->next;
- if(k->next == z)
- {
- printf("\nThere is no edge between %d and %d", x, y);
- goto tt;
- }
- }
- m = k->next;
- k->next = k->next->next;
- free(m);
- }
- if(t->key == y)
- {
- m = t;
- t = t->next;
- free(m);
- }
- else
- {
- while(t->next->key != y)
- {
- t = t->next;
- }
- m = t->next;
- t->next = t->next->next;
- free(m);
- }
- tt:;
- }
- void sort(int i)
- {
- struct node *t;
- int ks[MAX];
- int d = 0;
- int j, r, q;
- for(t = a[i]; t != z; t = t->next)
- {
- d += 1;
- ks[d] = t->key;
- }
- for(j = 1; j <= d; ++j)
- {
- for(r = j + 1; r <= d; ++r)
- {
- if(ks[j] > ks[r])
- {
- q = ks[r];
- ks[r] = ks[j];
- ks[j] = q;
- }
- }
- }
- d = 0;
- for(t = a[i]; t != z; t = t->next)
- {
- d += 1;
- t->key = ks[d];
- }
- }
- int main()
- {
- struct node *q;
- int x, i, stop;
- FILE *fp;
- //open file
- fp = fopen("alo.txt", "r");
- if(fp == NULL)
- {
- printf("\nError");
- return 0;
- }
- //scan n
- fscanf(fp, "%d\n", &n);
- printf("\n\nGraph G has: %d vertexes", n);
- init(n);
- //...
- while(!feof(fp))
- {
- fscanf(fp, "%d\n", &i);
- stop = 0;
- while(!stop)
- {
- fscanf(fp, "%d\n", &x);
- if(x != 0)
- {
- q =(struct node *) malloc(sizeof *q);
- insert(x, q, a[i]);
- }
- else stop = 1;
- }
- }
- //close file
- fclose(fp);
- //del sth
- del_node(1, 2);
- del_node(1, 3);
- del_node(5, 4);
- //sort sth
- /*for(i = 1; i <= n; ++i)
- {
- sort(i);
- }*/
- //print
- for(i = 1; i <= n; ++i)
- {
- printf("\n\tVertex %d:", i);
- show(a[i]);
- }
- printf("\n\nStarting visit :");
- listdfs();
- printf("\n\n");
- getch();
- }
Advertisement
Add Comment
Please, Sign In to add comment