{"id":331874,"date":"2022-04-13T15:00:16","date_gmt":"2022-04-13T15:00:16","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=331874"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=331874","title":{"rendered":"<span>\u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/eea\/d99\/359\/eead9935965e3dd82332e4a4cf41edbc.png\" width=\"780\" height=\"439\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/eea\/d99\/359\/eead9935965e3dd82332e4a4cf41edbc.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 (depth first search, DFS) \u0441 \u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434\u043e\u043c \u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u044b \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u0432 C, Java, Python \u0438 C++.<\/p>\n<p>\u201c\u041f\u043e\u0438\u0441\u043a \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443\u201d \u0438\u043b\u0438 \u201c\u043e\u0431\u0445\u043e\u0434 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443\u201d \u2014 \u044d\u0442\u043e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e \u043f\u043e\u0438\u0441\u043a\u0443 \u0432\u0441\u0435\u0445 \u0432\u0435\u0440\u0448\u0438\u043d \u0433\u0440\u0430\u0444\u0430 \u0438\u043b\u0438 \u0434\u0435\u0440\u0435\u0432\u0430. \u041e\u0431\u0445\u043e\u0434 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u043f\u043e\u0434 \u0441\u043e\u0431\u043e\u0439 \u043f\u043e\u0441\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0432\u0435\u0440\u0448\u0438\u043d <a href=\"https:\/\/www.programiz.com\/dsa\/graph\">\u0433\u0440\u0430\u0444\u0430<\/a>.<\/p>\n<h3>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443<\/h3>\n<p>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442 \u043a\u0430\u0436\u0434\u0443\u044e \u0432\u0435\u0440\u0448\u0438\u043d\u0443 (\u0443\u0437\u0435\u043b, node) \u0433\u0440\u0430\u0444\u0430 \u0432 \u043e\u0434\u043d\u0443 \u0438\u0437 \u0434\u0432\u0443\u0445 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439:<\/p>\n<ol>\n<li>\n<p>\u041f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u044b\u0435 (Visited).<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435 \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u044b\u0435 (Not Visited).<\/p>\n<\/li>\n<\/ol>\n<p>\u0426\u0435\u043b\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043c\u0435\u0442\u0438\u0442\u044c \u043a\u0430\u0436\u0434\u0443\u044e \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u043a\u0430\u043a \u201c\u041f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u0430\u044f\u201d, \u0438\u0437\u0431\u0435\u0433\u0430\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0446\u0438\u043a\u043b\u043e\u0432.<\/p>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<ol>\n<li>\n<p>\u041d\u0430\u0447\u043d\u0438\u0442\u0435 \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u0435 \u043b\u044e\u0431\u0443\u044e \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u0433\u0440\u0430\u0444\u0430 \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u0441\u0442\u0435\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0412\u043e\u0437\u044c\u043c\u0438\u0442\u0435 \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u0442\u0435\u043a\u0430 \u0438 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0435\u0433\u043e \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u201c\u041f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u044b\u0445\u201d.<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043c\u0435\u0436\u043d\u044b\u0445 \u0432\u0435\u0440\u0448\u0438\u043d \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u044b. \u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0442\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0442 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u201c\u041f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u044b\u0445\u201d, \u0432 \u0432\u0435\u0440\u0445 \u0441\u0442\u0435\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u0448\u0430\u0433\u0438 2 \u0438 3, \u043f\u043e\u043a\u0430 \u0441\u0442\u0435\u043a \u043d\u0435 \u0441\u0442\u0430\u043d\u0435\u0442 \u043f\u0443\u0441\u0442\u044b\u043c.<\/p>\n<\/li>\n<\/ol>\n<h3>\u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443<\/h3>\n<p>\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443. \u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0433\u0440\u0430\u0444 \u0441 \u043f\u044f\u0442\u044c\u044e \u0432\u0435\u0440\u0448\u0438\u043d\u0430\u043c\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c35\/eaf\/190\/c35eaf19080f494873db70e267fd4efe.png\" alt=\"\u041d\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0433\u0440\u0430\u0444 \u0441 \u043f\u044f\u0442\u044c\u044e \u0432\u0435\u0440\u0448\u0438\u043d\u0430\u043c\u0438\" title=\"\u041d\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0433\u0440\u0430\u0444 \u0441 \u043f\u044f\u0442\u044c\u044e \u0432\u0435\u0440\u0448\u0438\u043d\u0430\u043c\u0438\" width=\"1460\" height=\"484\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c35\/eaf\/190\/c35eaf19080f494873db70e267fd4efe.png\"\/><figcaption>\u041d\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0433\u0440\u0430\u0444 \u0441 \u043f\u044f\u0442\u044c\u044e \u0432\u0435\u0440\u0448\u0438\u043d\u0430\u043c\u0438<\/figcaption><\/figure>\n<p>\u041d\u0430\u0447\u043d\u0435\u043c \u043c\u044b \u0441 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u201c0\u201d. \u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442 \u0435\u0435 \u0441\u0430\u043c\u0443 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u201c\u041f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u044b\u0435\u201d (\u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u201cVisited\u201d), \u0430 \u0435\u0435 \u0441\u043c\u0435\u0436\u043d\u044b\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u2014 \u0432 \u0441\u0442\u0435\u043a.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/107\/8ff\/d8e\/1078ffd8eeb4ef92d4c73d68041192b9.png\" alt=\"\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 (\u0432\u0435\u0440\u0448\u0438\u043d\u0443) \u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u0435 \u0435\u0433\u043e \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u201c\u041f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u044b\u0435\u201d.\" title=\"\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 (\u0432\u0435\u0440\u0448\u0438\u043d\u0443) \u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u0435 \u0435\u0433\u043e \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u201c\u041f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u044b\u0435\u201d.\" width=\"1460\" height=\"484\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/107\/8ff\/d8e\/1078ffd8eeb4ef92d4c73d68041192b9.png\"\/><figcaption>\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 (\u0432\u0435\u0440\u0448\u0438\u043d\u0443) \u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u0435 \u0435\u0433\u043e \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u201c\u041f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u044b\u0435\u201d.<\/figcaption><\/figure>\n<p>\u0417\u0430\u0442\u0435\u043c \u043c\u044b \u0431\u0435\u0440\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u0432\u0435\u0440\u0445\u0443 \u0441\u0442\u0435\u043a\u0430, \u0442.\u0435. \u043a \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u201c1\u201d, \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0435\u0435 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u043c \u0432\u0435\u0440\u0448\u0438\u043d\u0430\u043c. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u0435\u0440\u0448\u0438\u043d\u0430 \u201c0\u201d \u0443\u0436\u0435 \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0432\u0435\u0440\u0448\u0438\u043d\u0430 \u201c2\u201d.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b86\/0a3\/595\/b860a3595fc4309f88efcd3f97fc9fa9.png\" alt=\"\u041e\u0431\u0445\u043e\u0434 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0435 \u0441\u0442\u0435\u043a\u0430.\" title=\"\u041e\u0431\u0445\u043e\u0434 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0435 \u0441\u0442\u0435\u043a\u0430.\" width=\"1460\" height=\"484\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b86\/0a3\/595\/b860a3595fc4309f88efcd3f97fc9fa9.png\"\/><figcaption>\u041e\u0431\u0445\u043e\u0434 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0435 \u0441\u0442\u0435\u043a\u0430.<\/figcaption><\/figure>\n<p>\u0412\u0435\u0440\u0448\u0438\u043d\u0430 \u201c2\u201d \u0441\u043c\u0435\u0436\u043d\u0430 \u043d\u0435\u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u0435 \u201c4\u201d, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0435 \u043d\u0430\u0432\u0435\u0440\u0445 \u0441\u0442\u0435\u043a\u0430 \u0438 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c \u0435\u0435.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3bc\/8f7\/19c\/3bc8f719c5419daaee0fd4e0b4cbcf08.png\" alt=\"\u0412\u0435\u0440\u0448\u0438\u043d\u0430 \u201c2\u201d \u0441\u043c\u0435\u0436\u043d\u0430 \u043d\u0435\u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u0435 \u201c4\u201d, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u044b \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u043c \u0435\u0435 \u0432 \u0432\u0435\u0440\u0445 \u0441\u0442\u0435\u043a\u0430.\" title=\"\u0412\u0435\u0440\u0448\u0438\u043d\u0430 \u201c2\u201d \u0441\u043c\u0435\u0436\u043d\u0430 \u043d\u0435\u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u0435 \u201c4\u201d, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u044b \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u043c \u0435\u0435 \u0432 \u0432\u0435\u0440\u0445 \u0441\u0442\u0435\u043a\u0430.\" width=\"1460\" height=\"484\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3bc\/8f7\/19c\/3bc8f719c5419daaee0fd4e0b4cbcf08.png\"\/><figcaption>\u0412\u0435\u0440\u0448\u0438\u043d\u0430 \u201c2\u201d \u0441\u043c\u0435\u0436\u043d\u0430 \u043d\u0435\u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u0435 \u201c4\u201d, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u044b \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u043c \u0435\u0435 \u0432 \u0432\u0435\u0440\u0445 \u0441\u0442\u0435\u043a\u0430.<\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7f8\/c20\/d7b\/7f8c20d7b37e96963c75da3890c7d2c0.png\" alt=\"\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u201c4\u201d \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u201c\u041f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u044b\u0435\u201d \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f.\" title=\"\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u201c4\u201d \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u201c\u041f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u044b\u0435\u201d \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f.\" width=\"1460\" height=\"484\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7f8\/c20\/d7b\/7f8c20d7b37e96963c75da3890c7d2c0.png\"\/><figcaption>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u201c4\u201d \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u201c\u041f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u044b\u0435\u201d \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f.<\/figcaption><\/figure>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u044b \u043f\u0440\u043e\u0439\u0434\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 (\u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u201c3\u201d), \u0432 \u0441\u0442\u0435\u043a\u0435 \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u043d\u0435\u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u0441\u043c\u0435\u0436\u043d\u044b\u0445 \u0432\u0435\u0440\u0448\u0438\u043d, \u0438 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0438 \u043e\u0431\u0445\u043e\u0434 \u0433\u0440\u0430\u0444\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/283\/0eb\/b7e\/2830ebb7e746d44d79f6c6ad8fa373f3.png\" alt=\"\u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0432\u0441\u0435\u0445 \u0441\u043c\u0435\u0436\u043d\u044b\u0445 \u0432\u0435\u0440\u0448\u0438\u043d \u0434\u043b\u044f \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u201c3\u201d \u0441\u0442\u0435\u043a \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u043f\u0443\u0441\u0442\u044b\u043c, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043e\u0431\u0445\u043e\u0434\u0430 \u0433\u0440\u0430\u0444\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b \u0441\u0432\u043e\u044e \u0440\u0430\u0431\u043e\u0442\u0443.\" title=\"\u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0432\u0441\u0435\u0445 \u0441\u043c\u0435\u0436\u043d\u044b\u0445 \u0432\u0435\u0440\u0448\u0438\u043d \u0434\u043b\u044f \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u201c3\u201d \u0441\u0442\u0435\u043a \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u043f\u0443\u0441\u0442\u044b\u043c, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043e\u0431\u0445\u043e\u0434\u0430 \u0433\u0440\u0430\u0444\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b \u0441\u0432\u043e\u044e \u0440\u0430\u0431\u043e\u0442\u0443.\" width=\"1460\" height=\"484\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/283\/0eb\/b7e\/2830ebb7e746d44d79f6c6ad8fa373f3.png\"\/><figcaption>\u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0432\u0441\u0435\u0445 \u0441\u043c\u0435\u0436\u043d\u044b\u0445 \u0432\u0435\u0440\u0448\u0438\u043d \u0434\u043b\u044f \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u201c3\u201d \u0441\u0442\u0435\u043a \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u043f\u0443\u0441\u0442\u044b\u043c, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043e\u0431\u0445\u043e\u0434\u0430 \u0433\u0440\u0430\u0444\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b \u0441\u0432\u043e\u044e \u0440\u0430\u0431\u043e\u0442\u0443.<\/figcaption><\/figure>\n<h3>\u041f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434 \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 (\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f)<\/h3>\n<p>\u041d\u0438\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434 \u0434\u043b\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 init() \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e DFS \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u0435. \u042d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0433\u0440\u0430\u0444 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0434\u0432\u0435 \u0440\u0430\u0437\u043d\u044b\u0435 \u043d\u0435\u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043c\u044b \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043a\u0430\u0436\u0434\u0443\u044e \u0432\u0435\u0440\u0448\u0438\u043d\u0443, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u0435.<\/p>\n<pre><code>DFS(G, u)     u.visited = true     for each v \u2208 G.Adj[u]         if v.visited == false             DFS(G,v)       init() {     For each u \u2208 G         u.visited = false      For each u \u2208 G        DFS(G, u) }<\/code><\/pre>\n<h3>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u043d\u0430 Python, Java \u0438 C\/C++<\/h3>\n<p>\u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043a\u043e\u0434\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443. \u041a\u043e\u0434 \u0431\u044b\u043b \u0443\u043f\u0440\u043e\u0449\u0435\u043d, \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0441\u0444\u043e\u043a\u0443\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0435, \u0430 \u043d\u0435 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0434\u0435\u0442\u0430\u043b\u044f\u0445.<\/p>\n<pre><code class=\"python\"># \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u043d\u0430 Python   # \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c def dfs(graph, start, visited=None):     if visited is None:         visited = set()     visited.add(start)      print(start)      for next in graph[start] - visited:         dfs(graph, next, visited)     return visited   graph = {'0': set(['1', '2']),          '1': set(['0', '3', '4']),          '2': set(['0']),          '3': set(['1']),          '4': set(['2', '3'])}  dfs(graph, '0')<\/code><\/pre>\n<pre><code class=\"java\">\/\/ \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u043d\u0430 Java import java.util.*;   class Graph {   private LinkedList&lt;Integer> adjLists[];   private boolean visited[];     \/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0433\u0440\u0430\u0444\u0430   Graph(int vertices) {     adjLists = new LinkedList[vertices];     visited = new boolean[vertices];       for (int i = 0; i &lt; vertices; i++)       adjLists[i] = new LinkedList&lt;Integer>();   }     \/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0431\u0435\u0440   void addEdge(int src, int dest) {     adjLists[src].add(dest);   }     \/\/ \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c    void DFS(int vertex) {     visited[vertex] = true;     System.out.print(vertex + \" \");       Iterator&lt;Integer> ite = adjLists[vertex].listIterator();     while (ite.hasNext()) {       int adj = ite.next();       if (!visited[adj])         DFS(adj);     }   }     public static void main(String args[]) {     Graph g = new Graph(4);       g.addEdge(0, 1);     g.addEdge(0, 2);     g.addEdge(1, 2);     g.addEdge(2, 3);       System.out.println(\"Following is Depth First Traversal\");       g.DFS(2);   } } <\/code><\/pre>\n<pre><code class=\"cpp\">\/\/ \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u043d\u0430 C   #include &lt;stdio.h> #include &lt;stdlib.h>   struct node {   int vertex;   struct node* next; };   struct node* createNode(int v);   struct Graph {   int numVertices;   int* visited;     \/\/ \u041d\u0430\u043c \u043d\u0443\u0436\u0435\u043d int** \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430.   \/\/ \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 node** \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u043f\u0438\u0441\u043a\u043e\u0432.   struct node** adjLists; };   \/\/ \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c void DFS(struct Graph* graph, int vertex) {   struct node* adjList = graph->adjLists[vertex];   struct node* temp = adjList;     graph->visited[vertex] = 1;   printf(\"Visited %d \\n\", vertex);     while (temp != NULL) {     int connectedVertex = temp->vertex;       if (graph->visited[connectedVertex] == 0) {       DFS(graph, connectedVertex);     }     temp = temp->next;   } }   \/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b struct node* createNode(int v) {   struct node* newNode = malloc(sizeof(struct node));   newNode->vertex = v;   newNode->next = NULL;   return newNode; }   \/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0433\u0440\u0430\u0444\u0430 struct Graph* createGraph(int vertices) {   struct Graph* graph = malloc(sizeof(struct Graph));   graph->numVertices = vertices;     graph->adjLists = malloc(vertices * sizeof(struct node*));     graph->visited = malloc(vertices * sizeof(int));     int i;   for (i = 0; i &lt; vertices; i++) {     graph->adjLists[i] = NULL;     graph->visited[i] = 0;   }   return graph; }   \/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0431\u0440\u0430 void addEdge(struct Graph* graph, int src, int dest) {   \/\/ \u041f\u0440\u043e\u0432\u043e\u0434\u0438\u043c \u0440\u0435\u0431\u0440\u043e \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0440\u0435\u0431\u0440\u0430 \u0433\u0440\u0430\u0444\u0430 \u043a \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u0435 \u0440\u0435\u0431\u0440\u0430 \u0433\u0440\u0430\u0444\u0430   struct node* newNode = createNode(dest);   newNode->next = graph->adjLists[src];   graph->adjLists[src] = newNode;     \/\/ \u041f\u0440\u043e\u0432\u043e\u0434\u0438\u043c \u0440\u0435\u0431\u0440\u043e \u0438\u0437 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0440\u0435\u0431\u0440\u0430 \u0433\u0440\u0430\u0444\u0430 \u0432 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0443\u044e \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u0440\u0435\u0431\u0440\u0430 \u0433\u0440\u0430\u0444\u0430   newNode = createNode(src);   newNode->next = graph->adjLists[dest];   graph->adjLists[dest] = newNode; }   \/\/ \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0433\u0440\u0430\u0444 void printGraph(struct Graph* graph) {   int v;   for (v = 0; v &lt; graph->numVertices; v++) {     struct node* temp = graph->adjLists[v];     printf(\"\\n Adjacency list of vertex %d\\n \", v);     while (temp) {       printf(\"%d -> \", temp->vertex);       temp = temp->next;     }     printf(\"\\n\");   } }   int main() {   struct Graph* graph = createGraph(4);   addEdge(graph, 0, 1);   addEdge(graph, 0, 2);   addEdge(graph, 1, 2);   addEdge(graph, 2, 3);     printGraph(graph);     DFS(graph, 2);     return 0; } <\/code><\/pre>\n<pre><code class=\"cpp\">\/\/ \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u0440\u043e\u0445\u043e\u0434\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u0432 C++   #include &lt;iostream> #include &lt;list> using namespace std;   class Graph {   int numVertices;   list&lt;int> *adjLists;   bool *visited;      public:   Graph(int V);   void addEdge(int src, int dest);   void DFS(int vertex); };   \/\/ \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0433\u0440\u0430\u0444\u0430 Graph::Graph(int vertices) {   numVertices = vertices;   adjLists = new list&lt;int>[vertices];   visited = new bool[vertices]; }   \/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0431\u0435\u0440 void Graph::addEdge(int src, int dest) {   adjLists[src].push_front(dest); }   \/\/ \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c  void Graph::DFS(int vertex) {   visited[vertex] = true;   list&lt;int> adjList = adjLists[vertex];     cout &lt;&lt; vertex &lt;&lt; \" \";     list&lt;int>::iterator i;   for (i = adjList.begin(); i != adjList.end(); ++i)     if (!visited[*i])       DFS(*i); }   int main() {   Graph g(4);   g.addEdge(0, 1);   g.addEdge(0, 2);   g.addEdge(1, 2);   g.addEdge(2, 3);     g.DFS(2);     return 0; }<\/code><\/pre>\n<h4>\u0421\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443<\/h4>\n<p>\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u200b\u200b\u0432 \u0432\u0438\u0434\u0435 O(V + E), \u0433\u0434\u0435 V \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0435\u0440\u0448\u0438\u043d, \u0430 E \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0435\u0431\u0435\u0440.<\/p>\n<p>\u041f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0440\u0430\u0432\u043d\u0430 O(V).<\/p>\n<h4>\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430<\/h4>\n<ol>\n<li>\n<p>\u0414\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u0443\u0442\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0434\u0432\u0443\u0434\u043e\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0433\u0440\u0430\u0444\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0441\u0438\u043b\u044c\u043d\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0433\u0440\u0430\u0444\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0446\u0438\u043a\u043b\u043e\u0432 \u0432 \u0433\u0440\u0430\u0444\u0435.<\/p>\n<\/li>\n<\/ol>\n<hr\/>\n<p>\u041f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0435\u043c \u0432\u0441\u0435\u0445 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u043d\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0443\u0440\u043e\u043a \u0432 OTUS \u00ab\u0422\u0435\u043e\u0440\u0438\u044f \u0433\u0440\u0430\u0444\u043e\u0432. \u0422\u0435\u0440\u043c\u0438\u043d\u044b \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b\u00bb, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 <a href=\"https:\/\/otus.pw\/02ci\/\">\u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435<\/a>.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/660725\/\"> https:\/\/habr.com\/ru\/company\/otus\/blog\/660725\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 (depth first search, DFS) \u0441 \u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434\u043e\u043c \u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u044b \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u0432 C, Java, Python \u0438 C++.<\/p>\n<p>\u201c\u041f\u043e\u0438\u0441\u043a \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443\u201d \u0438\u043b\u0438 \u201c\u043e\u0431\u0445\u043e\u0434 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443\u201d \u2014 \u044d\u0442\u043e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e \u043f\u043e\u0438\u0441\u043a\u0443 \u0432\u0441\u0435\u0445 \u0432\u0435\u0440\u0448\u0438\u043d \u0433\u0440\u0430\u0444\u0430 \u0438\u043b\u0438 \u0434\u0435\u0440\u0435\u0432\u0430. \u041e\u0431\u0445\u043e\u0434 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u043f\u043e\u0434 \u0441\u043e\u0431\u043e\u0439 \u043f\u043e\u0441\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0432\u0435\u0440\u0448\u0438\u043d <a href=\"https:\/\/www.programiz.com\/dsa\/graph\">\u0433\u0440\u0430\u0444\u0430<\/a>.<\/p>\n<h3>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443<\/h3>\n<p>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442 \u043a\u0430\u0436\u0434\u0443\u044e \u0432\u0435\u0440\u0448\u0438\u043d\u0443 (\u0443\u0437\u0435\u043b, node) \u0433\u0440\u0430\u0444\u0430 \u0432 \u043e\u0434\u043d\u0443 \u0438\u0437 \u0434\u0432\u0443\u0445 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0439:<\/p>\n<ol>\n<li>\n<p>\u041f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u044b\u0435 (Visited).<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435 \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u044b\u0435 (Not Visited).<\/p>\n<\/li>\n<\/ol>\n<p>\u0426\u0435\u043b\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043c\u0435\u0442\u0438\u0442\u044c \u043a\u0430\u0436\u0434\u0443\u044e \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u043a\u0430\u043a \u201c\u041f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u0430\u044f\u201d, \u0438\u0437\u0431\u0435\u0433\u0430\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0446\u0438\u043a\u043b\u043e\u0432.<\/p>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<ol>\n<li>\n<p>\u041d\u0430\u0447\u043d\u0438\u0442\u0435 \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u0435 \u043b\u044e\u0431\u0443\u044e \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u0433\u0440\u0430\u0444\u0430 \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u0441\u0442\u0435\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0412\u043e\u0437\u044c\u043c\u0438\u0442\u0435 \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u0442\u0435\u043a\u0430 \u0438 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0435\u0433\u043e \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u201c\u041f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u044b\u0445\u201d.<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043c\u0435\u0436\u043d\u044b\u0445 \u0432\u0435\u0440\u0448\u0438\u043d \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u044b. \u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0442\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0442 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u201c\u041f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u044b\u0445\u201d, \u0432 \u0432\u0435\u0440\u0445 \u0441\u0442\u0435\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u0448\u0430\u0433\u0438 2 \u0438 3, \u043f\u043e\u043a\u0430 \u0441\u0442\u0435\u043a \u043d\u0435 \u0441\u0442\u0430\u043d\u0435\u0442 \u043f\u0443\u0441\u0442\u044b\u043c.<\/p>\n<\/li>\n<\/ol>\n<h3>\u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443<\/h3>\n<p>\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443. \u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0433\u0440\u0430\u0444 \u0441 \u043f\u044f\u0442\u044c\u044e \u0432\u0435\u0440\u0448\u0438\u043d\u0430\u043c\u0438.<\/p>\n<figure class=\"full-width\"><figcaption>\u041d\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0433\u0440\u0430\u0444 \u0441 \u043f\u044f\u0442\u044c\u044e \u0432\u0435\u0440\u0448\u0438\u043d\u0430\u043c\u0438<\/figcaption><\/figure>\n<p>\u041d\u0430\u0447\u043d\u0435\u043c \u043c\u044b \u0441 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u201c0\u201d. \u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442 \u0435\u0435 \u0441\u0430\u043c\u0443 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u201c\u041f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u044b\u0435\u201d (\u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u201cVisited\u201d), \u0430 \u0435\u0435 \u0441\u043c\u0435\u0436\u043d\u044b\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u2014 \u0432 \u0441\u0442\u0435\u043a.<\/p>\n<figure class=\"full-width\"><figcaption>\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 (\u0432\u0435\u0440\u0448\u0438\u043d\u0443) \u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u0435 \u0435\u0433\u043e \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u201c\u041f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u044b\u0435\u201d.<\/figcaption><\/figure>\n<p>\u0417\u0430\u0442\u0435\u043c \u043c\u044b \u0431\u0435\u0440\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u0432\u0435\u0440\u0445\u0443 \u0441\u0442\u0435\u043a\u0430, \u0442.\u0435. \u043a \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u201c1\u201d, \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0435\u0435 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u043c \u0432\u0435\u0440\u0448\u0438\u043d\u0430\u043c. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u0435\u0440\u0448\u0438\u043d\u0430 \u201c0\u201d \u0443\u0436\u0435 \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u0430, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0432\u0435\u0440\u0448\u0438\u043d\u0430 \u201c2\u201d.<\/p>\n<figure class=\"full-width\"><figcaption>\u041e\u0431\u0445\u043e\u0434 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0435 \u0441\u0442\u0435\u043a\u0430.<\/figcaption><\/figure>\n<p>\u0412\u0435\u0440\u0448\u0438\u043d\u0430 \u201c2\u201d \u0441\u043c\u0435\u0436\u043d\u0430 \u043d\u0435\u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u0435 \u201c4\u201d, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0435 \u043d\u0430\u0432\u0435\u0440\u0445 \u0441\u0442\u0435\u043a\u0430 \u0438 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c \u0435\u0435.<\/p>\n<figure class=\"full-width\"><figcaption>\u0412\u0435\u0440\u0448\u0438\u043d\u0430 \u201c2\u201d \u0441\u043c\u0435\u0436\u043d\u0430 \u043d\u0435\u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u0435 \u201c4\u201d, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u044b \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u043c \u0435\u0435 \u0432 \u0432\u0435\u0440\u0445 \u0441\u0442\u0435\u043a\u0430.<\/figcaption><\/figure>\n<figure class=\"full-width\"><figcaption>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u201c4\u201d \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u201c\u041f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u044b\u0435\u201d \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f.<\/figcaption><\/figure>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u044b \u043f\u0440\u043e\u0439\u0434\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 (\u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u201c3\u201d), \u0432 \u0441\u0442\u0435\u043a\u0435 \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u043d\u0435\u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u0441\u043c\u0435\u0436\u043d\u044b\u0445 \u0432\u0435\u0440\u0448\u0438\u043d, \u0438 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0438 \u043e\u0431\u0445\u043e\u0434 \u0433\u0440\u0430\u0444\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443.<\/p>\n<figure class=\"full-width\"><figcaption>\u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0432\u0441\u0435\u0445 \u0441\u043c\u0435\u0436\u043d\u044b\u0445 \u0432\u0435\u0440\u0448\u0438\u043d \u0434\u043b\u044f \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u201c3\u201d \u0441\u0442\u0435\u043a \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u043f\u0443\u0441\u0442\u044b\u043c, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043e\u0431\u0445\u043e\u0434\u0430 \u0433\u0440\u0430\u0444\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b \u0441\u0432\u043e\u044e \u0440\u0430\u0431\u043e\u0442\u0443.<\/figcaption><\/figure>\n<h3>\u041f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434 \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 (\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f)<\/h3>\n<p>\u041d\u0438\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434 \u0434\u043b\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 init() \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e DFS \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u0435. \u042d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0433\u0440\u0430\u0444 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0434\u0432\u0435 \u0440\u0430\u0437\u043d\u044b\u0435 \u043d\u0435\u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043c\u044b \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043a\u0430\u0436\u0434\u0443\u044e \u0432\u0435\u0440\u0448\u0438\u043d\u0443, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u0435.<\/p>\n<pre><code>DFS(G, u)     u.visited = true     for each v \u2208 G.Adj[u]         if v.visited == false             DFS(G,v)       init() {     For each u \u2208 G         u.visited = false      For each u \u2208 G        DFS(G, u) }<\/code><\/pre>\n<h3>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u043d\u0430 Python, Java \u0438 C\/C++<\/h3>\n<p>\u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043a\u043e\u0434\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443. \u041a\u043e\u0434 \u0431\u044b\u043b \u0443\u043f\u0440\u043e\u0449\u0435\u043d, \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0441\u0444\u043e\u043a\u0443\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0435, \u0430 \u043d\u0435 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0434\u0435\u0442\u0430\u043b\u044f\u0445.<\/p>\n<pre><code class=\"python\"># \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u043d\u0430 Python   # \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c def dfs(graph, start, visited=None):     if visited is None:         visited = set()     visited.add(start)      print(start)      for next in graph[start] - visited:         dfs(graph, next, visited)     return visited   graph = {'0': set(['1', '2']),          '1': set(['0', '3', '4']),          '2': set(['0']),          '3': set(['1']),          '4': set(['2', '3'])}  dfs(graph, '0')<\/code><\/pre>\n<pre><code class=\"java\">\/\/ \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u043d\u0430 Java import java.util.*;   class Graph {   private LinkedList&lt;Integer> adjLists[];   private boolean visited[];     \/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0433\u0440\u0430\u0444\u0430   Graph(int vertices) {     adjLists = new LinkedList[vertices];     visited = new boolean[vertices];       for (int i = 0; i &lt; vertices; i++)       adjLists[i] = new LinkedList&lt;Integer>();   }     \/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0431\u0435\u0440   void addEdge(int src, int dest) {     adjLists[src].add(dest);   }     \/\/ \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c    void DFS(int vertex) {     visited[vertex] = true;     System.out.print(vertex + \" \");       Iterator&lt;Integer> ite = adjLists[vertex].listIterator();     while (ite.hasNext()) {       int adj = ite.next();       if (!visited[adj])         DFS(adj);     }   }     public static void main(String args[]) {     Graph g = new Graph(4);       g.addEdge(0, 1);     g.addEdge(0, 2);     g.addEdge(1, 2);     g.addEdge(2, 3);       System.out.println(\"Following is Depth First Traversal\");       g.DFS(2);   } } <\/code><\/pre>\n<pre><code class=\"cpp\">\/\/ \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u043d\u0430 C   #include &lt;stdio.h> #include &lt;stdlib.h>   struct node {   int vertex;   struct node* next; };   struct node* createNode(int v);   struct Graph {   int numVertices;   int* visited;     \/\/ \u041d\u0430\u043c \u043d\u0443\u0436\u0435\u043d int** \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430.   \/\/ \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 node** \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u043f\u0438\u0441\u043a\u043e\u0432.   struct node** adjLists; };   \/\/ \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c void DFS(struct Graph* graph, int vertex) {   struct node* adjList = graph->adjLists[vertex];   struct node* temp = adjList;     graph->visited[vertex] = 1;   printf(\"Visited %d \\n\", vertex);     while (temp != NULL) {     int connectedVertex = temp->vertex;       if (graph->visited[connectedVertex] == 0) {       DFS(graph, connectedVertex);     }     temp = temp->next;   } }   \/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b struct node* createNode(int v) {   struct node* newNode = malloc(sizeof(struct node));   newNode->vertex = v;   newNode->next = NULL;   return newNode; }   \/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0433\u0440\u0430\u0444\u0430 struct Graph* createGraph(int vertices) {   struct Graph* graph = malloc(sizeof(struct Graph));   graph->numVertices = vertices;     graph->adjLists = malloc(vertices * sizeof(struct node*));     graph->visited = malloc(vertices * sizeof(int));     int i;   for (i = 0; i &lt; vertices; i++) {     graph->adjLists[i] = NULL;     graph->visited[i] = 0;   }   return graph; }   \/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0431\u0440\u0430 void addEdge(struct Graph* graph, int src, int dest) {   \/\/ \u041f\u0440\u043e\u0432\u043e\u0434\u0438\u043c \u0440\u0435\u0431\u0440\u043e \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0440\u0435\u0431\u0440\u0430 \u0433\u0440\u0430\u0444\u0430 \u043a \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u0435 \u0440\u0435\u0431\u0440\u0430 \u0433\u0440\u0430\u0444\u0430   struct node* newNode = createNode(dest);   newNode->next = graph->adjLists[src];   graph->adjLists[src] = newNode;     \/\/ \u041f\u0440\u043e\u0432\u043e\u0434\u0438\u043c \u0440\u0435\u0431\u0440\u043e \u0438\u0437 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0440\u0435\u0431\u0440\u0430 \u0433\u0440\u0430\u0444\u0430 \u0432 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0443\u044e \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u0440\u0435\u0431\u0440\u0430 \u0433\u0440\u0430\u0444\u0430   newNode = createNode(src);   newNode->next = graph->adjLists[dest];   graph->adjLists[dest] = newNode; }   \/\/ \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0433\u0440\u0430\u0444 void printGraph(struct Graph* graph) {   int v;   for (v = 0; v &lt; graph->numVertices; v++) {     struct node* temp = graph->adjLists[v];     printf(\"\\n Adjacency list of vertex %d\\n \", v);     while (temp) {       printf(\"%d -> \", temp->vertex);       temp = temp->next;     }     printf(\"\\n\");   } }   int main() {   struct Graph* graph = createGraph(4);   addEdge(graph, 0, 1);   addEdge(graph, 0, 2);   addEdge(graph, 1, 2);   addEdge(graph, 2, 3);     printGraph(graph);     DFS(graph, 2);     return 0; } <\/code><\/pre>\n<pre><code class=\"cpp\">\/\/ \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u0440\u043e\u0445\u043e\u0434\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u0432 C++   #include &lt;iostream> #include &lt;list> using namespace std;   class Graph {   int numVertices;   list&lt;int> *adjLists;   bool *visited;      public:   Graph(int V);   void addEdge(int src, int dest);   void DFS(int vertex); };   \/\/ \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0433\u0440\u0430\u0444\u0430 Graph::Graph(int vertices) {   numVertices = vertices;   adjLists = new list&lt;int>[vertices];   visited = new bool[vertices]; }   \/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0431\u0435\u0440 void Graph::addEdge(int src, int dest) {   adjLists[src].push_front(dest); }   \/\/ \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c  void Graph::DFS(int vertex) {   visited[vertex] = true;   list&lt;int> adjList = adjLists[vertex];     cout &lt;&lt; vertex &lt;&lt; \" \";     list&lt;int>::iterator i;   for (i = adjList.begin(); i != adjList.end(); ++i)     if (!visited[*i])       DFS(*i); }   int main() {   Graph g(4);   g.addEdge(0, 1);   g.addEdge(0, 2);   g.addEdge(1, 2);   g.addEdge(2, 3);     g.DFS(2);     return 0; }<\/code><\/pre>\n<h4>\u0421\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443<\/h4>\n<p>\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u200b\u200b\u0432 \u0432\u0438\u0434\u0435 O(V + E), \u0433\u0434\u0435 V \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0435\u0440\u0448\u0438\u043d, \u0430 E \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0435\u0431\u0435\u0440.<\/p>\n<p>\u041f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0440\u0430\u0432\u043d\u0430 O(V).<\/p>\n<h4>\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430<\/h4>\n<ol>\n<li>\n<p>\u0414\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u0443\u0442\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0434\u0432\u0443\u0434\u043e\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0433\u0440\u0430\u0444\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0441\u0438\u043b\u044c\u043d\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0433\u0440\u0430\u0444\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0446\u0438\u043a\u043b\u043e\u0432 \u0432 \u0433\u0440\u0430\u0444\u0435.<\/p>\n<\/li>\n<\/ol>\n<hr\/>\n<p>\u041f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0435\u043c \u0432\u0441\u0435\u0445 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u043d\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0443\u0440\u043e\u043a \u0432 OTUS \u00ab\u0422\u0435\u043e\u0440\u0438\u044f \u0433\u0440\u0430\u0444\u043e\u0432. \u0422\u0435\u0440\u043c\u0438\u043d\u044b \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b\u00bb, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 <a href=\"https:\/\/otus.pw\/02ci\/\">\u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435<\/a>.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/660725\/\"> https:\/\/habr.com\/ru\/company\/otus\/blog\/660725\/<\/a><br \/><\/br><\/br><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-331874","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/331874","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=331874"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/331874\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=331874"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=331874"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=331874"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}