Pretty simple and somewhat forced towards the solution.
Counting number of nodes and shortest path. You have to print the path too.
It's simply BFS. The pi[ ] array comes handy to print the path.
Method: BFS (Use the pi array)
Counting number of nodes and shortest path. You have to print the path too.
It's simply BFS. The pi[ ] array comes handy to print the path.
Method: BFS (Use the pi array)
#include <cstdio> #include <cmath> #include <cstdlib> #include <cstring> #include <queue> #include <algorithm> #define WHITE 0 #define GREY 1 #define BLACK 3 #define INF 0 #define NIL -1 using namespace std; bool color[400], adj[400][400]; int d[400], p[400]; char in[100000]; bool bfs( int s, int des, int n ) { int u, v; for (u=0 ; u<=300 ; u++) { color[u] = WHITE; d[u] = INF; p[u] = NIL; } color[s] = GREY; d[s] = 0; p[s] = NIL; queue<int> q; q.push(s); while (!q.empty()) { u = q.front(); q.pop(); for (v=1 ; v<=n ; v++) { if (adj[u][v] && color[v]==WHITE) { color[v] = GREY; d[v] = d[u]+1; p[v] = u; q.push(v); if (v == des) { return true; } } } color[u] = BLACK; } return false; } void print_path(int v) { int i, j, pr[1000]; for (i=v, j=0 ; i>0 ; i=p[i], j++) pr[j] = i; for (--j ; j>0 ; j--) printf("%d ",pr[j]); printf("%d\n",pr[j]); //|Last one can't have } //|can't have blank space //|after it int main( void ) { int i, j, c, n, u, v, nodes, conn; char *p; while ( scanf("%d",&nodes) == 1 ) { getchar(); // Back off for gets() for (i=0 ; i<=300 ; i++) { for (j=0 ; j<=300 ; j++) adj[i][j] = false; } n = nodes; while (nodes--) { gets(in); p = strtok(in,"-,"); sscanf(p,"%d",&i); p = strtok(NULL,"-,"); while (p) { sscanf(p,"%d",&c); adj[i][c] = true; //|Connections are !bidirectional p = strtok(NULL,"-,"); } } scanf("%d",&conn); printf("-----\n"); for (i=1 ; i<=conn ; i++) { scanf("%d %d",&u, &v); if (bfs(u,v,n)) { print_path( v ); } else { printf("connection impossible\n"); } } } }
No comments:
Post a Comment
Post your comment here. If you want to say something about programming problems, scripts, software etc, please try to be as descriptive as possible.