Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #define N 10000
- typedef struct sp_tree{
- int id;
- struct sp_tree *adj[N];
- int visited;
- int n_adj;
- }sp_tree;
- sp_tree dfs[N];
- int max_node;
- void d_dfs(int v, int c, int *counter){
- int i;
- c++;
- for(i = 0; i < dfs[v].n_adj;i++){
- if(dfs[v].adj[i]->visited == 0){
- printf("node %d , adj -> %d, c -> %d, counter -> %d\n",v,dfs[v].adj[i]->id,c,*counter);
- dfs[v].visited = 1;
- if(*counter <= c){
- *counter = c;
- max_node = dfs[v].adj[i]->id;
- }
- d_dfs(dfs[v].adj[i]->id,c,counter);
- }
- }
- }
- void problem_e(int v){
- int counter = 0;
- d_dfs(v,1,&counter);
- d_dfs(max_node, 1, &counter);
- printf("%d\n",counter);
- }
- void add_vertices(int v1, int v2){
- dfs[v1].id = v1;
- dfs[v1].adj[dfs[v1].n_adj] = &dfs[v2];
- dfs[v1].visited = 0;
- dfs[v1].n_adj++;
- dfs[v2].id = v2;
- dfs[v2].adj[dfs[v2].n_adj] = &dfs[v1];
- dfs[v2].visited = 0;
- dfs[v2].n_adj++;
- }
- int main(){
- int n;
- int i;
- int v1,v2;
- scanf("%d",&n);
- for(i = 0; i < n; i++){
- scanf("%d %d",&v1,&v2 );
- add_vertices(v1,v2);
- }
- problem_e(v1);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement