ظاهر کلی برنامه بدین صورت است:
![ظاهر برنامه](https://s29.picofile.com/file/8463783334/graph.gif)
# پروژه اولیه
پروژه اولیه را از
[این لینک](/contest/assignments/54144/download_problem_initial_project/183309/)
دانلود کنید.
<details class="green">
<summary> ساختار فایلها </summary>
```
graph
├── public
│ ├── favicon.ico
│ └── index.html
├── src
│ ├── App.js
│ ├── Graph.js
│ ├── index.css
│ └── index.js
├── package-lock.json
└── package.json
```
</details>
<details class="violet">
<summary> راه اندازی پروژه</summary>
برای اجرای پروژه، باید`NodeJS` و `npm` را از قبل نصب کرده باشید.
+ ابتدا پروژهی اولیه را دانلود و از حالت فشرده خارج کنید.
+ در پوشهی `steps` ، دستور `npm install` را برای نصب نیازمندیها اجرا کنید.
+ در همین پوشه، دستور `npm start` را برای راهاندازی پروژه اجرا کنید.
</details>
# توضیحات
در این سوال شما باید الگوریتمهای `BFS` و `DFS` که را طوری تغییر دهید مسیری که این الگوریتمها سرچ را انجام میدهند تا هدف نمایش داده شود.
### پراپرتیهای کامپوننت Graph:
- `highlightNode`: ایدی گره برای *highlight* کردن که برای نمایش مسیر استفاده میشود.
- `startNode`: ایدی گره شروع که با اولین کلیک روی گره مشخص میشود.
- `goalNode`: ایدی گرهای که برای آن جستجو انجام میدهیم که با دومین کلیک روی گره مشخص میشود.
- `onNodeClick`: تابعی که هنگام کلیک شدن گره با ایدی ان گره صدا زده میشود.
- `graph`: گراف برای نمایش
اولین کلیک روی هر گرهی، گره شروع و دومین کلیک روی هر گرهی گره پایان را مشخص میکند. وقتی دکمه "Clear" کلیک شد باید این دو گره پاک شوند.
زمانی که بین هر بار highlight کردن مسیر 500 میلیثانیه است. بعداز کلیک شدن روی "DFS" یا "BFS" الگورتیم مربوطه از گره شروع، شروع به نمایش میشود و بعداز اینکه گره هدف را پیدا کرد یا بعداز جستجوی تمام گرهها به هدف نرسید، 500 میلیثانیه بعد از highlight اخرین گره، از highlight خارج میشود.
# نکات
+ شما تنها مجاز به اعمال تغییرات درون فایل `App.js` هستید.
+ برای آشنایی بیشتر با الگوریتم `Depth-first search` میتوانید به این [لینک](https://en.wikipedia.org/wiki/Depth-first_search) و برای الگوریتم `Breadth-first search` به این [لینک](https://en.wikipedia.org/wiki/Breadth-first_search) مراجعه کنید.
+ به هنگام ثبت پاسخ، فقط فایل `App.js` یا پروژه را با ساختار زیر ارسال کنید:
```
[your-zip-file-name].zip
├── public
│ ├── favicon.ico
│ └── index.html
├── src
│ ├── App.js
│ ├── Graph.js
│ ├── index.css
│ └── index.js
├── package-lock.json
└── package.json
```