while (!h_done){ bfs(edges, vertices) cudaMemcpy(&h_done, &d_done, sizeof(bool), cudaDeviceToHost); } while(!h_done){ cudaMemcpy(&d_done, &h_true, sizeof(bool), cudaHostToDevice); bfs(edges, vertices) cudaMemcpy(&h_done, &d_done, sizeof(bool), cudaDeviceToHost); } if((vfirst != -1) && (vsecond == -1)){ vertices[vsecond] = vfirst + 1; done = false; } if ((vfirst == -1) && (vsecond != -1)){ vertices[vfirst] = vsecond + 1; done = false; }