1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
using namespace std; #define SIZE 9
struct { int to, weight; }; vector<Node> edges[SIZE];
void zeroOneBFS(int start){ int dist[SIZE]; for(int i = 0; i < SIZE; i++) dist[i] = INT_MAX; deque<int> Q; dist[start] = 0; Q.push_back(start); while(!Q.empty()){ int v = Q.front(); Q.pop_front(); for(int i = 0; i < edges[v].size(); i++){ if(dist[edges[v][i].to] > dist[v] + edges[v][i].weight){ dist[edges[v][i].to] = dist[v]+ edges[v][i].weight; if(edges[v][i].weight == 0) Q.push_front(edges[v][i].to); else Q.push_back(edges[v][i].to); } } } for(int i = 0; i < SIZE; i++) cout<<dist[i]<<" "; }
void addEdge(int u, int v, int wt){ edges[u].push_back({v, wt}); edges[v].push_back({u, wt}); }
int main(){ addEdge(0, 1, 0); addEdge(0, 7, 1); addEdge(1, 7, 1); addEdge(1, 2, 1); addEdge(2, 3, 0); addEdge(2, 5, 0); addEdge(2, 8, 1); addEdge(3, 4, 1); addEdge(3, 5, 1); addEdge(4, 5, 1); addEdge(5, 6, 1); addEdge(6, 7, 1); addEdge(7, 8, 1); zeroOneBFS(0); return 0; }
|
近期评论