PDA

View Full Version : سوال: گراف جهت دار و نمايش ارتباط بين دو راس !



J A V I D
دوشنبه 27 مهر 1388, 22:27 عصر
سلام

من يه مدتي به صورت خودجوش تصميم گرفتم اصول زبان سي پلاس پلاس رو يكم ياد بگيرم بعد به صورت اصولي برم سراغ ويژال سي !

تو اين سيستم خود جوش و جستجو اينترنتي به سوالي بر خوردم كه هر جور فكر مي كنم ، نمي دونم چجوري بايد تو زبان برنامه نويسي تعريفش كنم سرچم كه كردم دقيقا نفهميدم با چه چيزي مي شه اينو عملي كرد ...

به عنوان مثال ما سه تا راس داريم به نام هاي a , b , c كه به صورت زير با هم ارتباط دارن :


http://www.1pix.org/multi/images/g3hbhsexhwmux70jjva.jpg

مي خوام برنامه طوري باشه كه از ما اسم دو تا راس رو بگيره مثلا مي زنيم a , b و اگه مسير وجود داشت يه كاراكتر مثل y چاپ كنه و اگرم نداشت مثلا بزنه n ! خوب من اگه اشتباه نكنم براي ساخت همچين چيزي بايد يه ماتريس سه در سه تعريف كنيم به صورت زير :

a b c
a 0 1 1
b 0 0 1
c 0 0 0

خوب باز اشتباه نكنم اين ماتريس رو بايد تو يه آرايه تعريف كنيم ، و بعدش دو تا ورودي بگيريم كه اسم راس هاست بعد بايد يه شرط تعريف كنيم كه مثلا اگه ورودي بود a و b اگر برابر يك شد يعني يال وجود داره و اگه برابر صفر بود يعني يالي وجود نداره ...تو سرچ هايي كه كرده بودم اينا رو گفته بودن .....

حالا من كلا يه سوال دارم كه اينو مي شه با استفاده از آرايه درست كرد يا من كلا سركارم اينقدر دارم با آرايه رو اين فكر مي كنم ؟!؟
يه سوال ديگه هم دارم برا اينكه واقعا بتونم اين زبان رو ياد بگيرم چه كتابي رو پيشنهاد مي دين ؟!؟

با تشكر

tdkhakpur
دوشنبه 27 مهر 1388, 22:52 عصر
براي اينگونه كار ها و يا بصورت كلي از هر طريقي ميشه وارد شد فقط بايد بررسي كنيد كه هزينه كدام به صرفه تره.
بهترين و كاملترين راه استفاده از ساختارها براي مشخص كردن لينكها و همچنين اشاره گر به اينگونه ساختارهاست.


typedef struct graph_
{
bool scaned;
void *top_link;
void *right_link;
void *left_link;
}Graph;

ولي در مورد اينكه زبان سي يا هر زبان ديگر را ياد بگيريد بهترين راه استفاده از توابع مشابه يعني اينكه شما قبلا هر زباني را كه باهاش كار ميكرديد دنبال كلمات كليدي مشابه داخل زبان برنامه نويسي جديد بگرديد.

J A V I D
دوشنبه 27 مهر 1388, 23:21 عصر
خوب اين چيزا كه شما نوشتي من نفهميدم چيه به چيه ! هنوز سوادم به اون حد نرسيده ظاهرا حالا با استفاده از همون آرايه ها بالاخره مي شه اينو كاريش كرد يا نه ؟!؟ من يه برنامه ديدم كه با استفاده از آرايه ها براي هر سطر و ستون ماتريس يه عدد مي گرفت و بزرگترين عدد رو توش پيدا مي كرد ، برا همين فكر كردم برا اين مسئله هم مي شه از اين آرايه ها استفاده كرد ...

در ضمن من قبلا زبان خاصي رو كار نمي كردم فقط يكم PHP بلدم در حدي كه بتونم كدهاي آماده رو به دلخواه تغيير بدم ....

tdkhakpur
سه شنبه 28 مهر 1388, 15:27 عصر
سلام
واقع ميشه گفت از جاي خيلي سخت كار شروع كرديد به هر صورت كد زير همان برنامه شما رو شبيه سازي ميكند فقط جايي كه من داخل كد نشان ميدم بايد شما در اون محل داده هاي گراف را داخل ساختار قرار بديد.


#include <iostream.h>
typedef struct st_
{
char *Top;
char *Left;
char *Right;
bool Active;
} Graph;
Graph *yal1, *yal2;
int c = 0;
void FindSameYal( Graph *Next )
{
if( Next == NULL ) return;
if( Next == yal1 || Next == yal2 ) C++‎‎;
if(c==3){
cput<<"\n"<<"Finded.";
c = 0;
}
if( !Next->Active ){
Next->Active = false
FindSameYal( Next->Left );
FindSameYal( Next->Right );
FindSameYal( Next->Top );
Next->Active = false
}
}
int main()
{
Graph graph={0};

// cin >> yal1>>yal2;
// در اين محل بايد محتواي ساختار را پر كنيد البه بصورت پويا و همچنين ارتباط آنها با يكديگر

FindSameYal( &graph )
return 0;
}

ali zi zeperto
سه شنبه 28 مهر 1388, 17:59 عصر
بپیاده کردن این برنامه با آرایه سخت تز از لیست پیوندی میشه.

J A V I D
چهارشنبه 29 مهر 1388, 08:53 صبح
ali zi zeperto (http://barnamenevis.org/forum/member.php?u=49096) پس يعني در كل با آرايه هم مي شه ! فكر كنم اون ديگه كار من نباشه !

tdkhakpur دوست عزيز از كمك شما بسيار سپاس گذارم .... متغيرهاي پويا رو اينطوري تعريف مي كنن ديگه :

Top = new int[0,1,1];ببخشيد من چون مرجع درست و حسابي نداشتم خيلي قروقاطي مباحث رو نصفه نيمه بلدم و وسطاش خيلي چيزا بايد ياد مي گرفتم كه نگرفتم ... اگه براتون امكان داره يه مرجع يا سايت مناسبم براي يادگيري اصولي به من معرفي كنيد ...

tdkhakpur
چهارشنبه 29 مهر 1388, 10:07 صبح
ميتوانيد به اين http://richardbowles.tripod.com/cpp/linklist/linklist.htmسايت هم سر بزنيد خيلي با ارزشه ولي براي اينكه واقعا مطلب را بهتر متوجه بشيد كتاب مربوط به ساختمان داده ها و همچنين نحوه استفاده از توابع بازگشتي را كه معمولا همه كتابها در موردش يك فصل را اختصاص ميدهند مطالعه كنيد.