PDA

View Full Version : تخصیص لیست های پیوندی به آرایه ای از لیست های پیوندی



Yama12
چهارشنبه 27 اسفند 1393, 14:54 عصر
سلام من میخواهم لیست پیوندی path رو که در هر حلقه یک مقدار متفاوت را مثل 2,13,3,5 دارد را به یک خانه از آرایه ای از لیست های پیوندی به نام AllPathes تخصیص بدهم مثل کد زیر، اما در انتها کل آرایه Allpathes مقدار آخرین Path رو میگیرن. q هم که شمارنده حلقه هست. نحوه تخصیص صحیح اینا چجوری باید باشه؟
مرسی


AllPathes[q] = Path;

MehdiElexal
چهارشنبه 27 اسفند 1393, 15:12 عصر
خانه حافظه پچ نیز باید همراه کانتر اضافه شه از ابتدا تا تمام مقادیر جایگذاری شن
اگر درست متوجه نشدم لطفا قطعه کد بگذارید

Yama12
چهارشنبه 27 اسفند 1393, 15:31 عصر
path هر بار داخل حلقه مقدار جدیدی میگیره


LinkedList<int> Path = new LinkedList<int>();

for (int q = 0; q < int.Parse(txtItteration.Text); q++)
{
path هر بار تغییر می کند برای مثال:
Path.AddLast(q);

AllPathes[q] = Path;

}


اما مقدار آخرین path برای تمام خانه های allpathes ذخیره می شود.

reza_noei
چهارشنبه 27 اسفند 1393, 16:18 عصر
path هر بار داخل حلقه مقدار جدیدی میگیره


LinkedList<int> Path = new LinkedList<int>();

for (int q = 0; q < int.Parse(txtItteration.Text); q++)
{
path هر بار تغییر می کند برای مثال:
Path.AddLast(q);

AllPathes[q] = Path;

}


اما مقدار آخرین path برای تمام خانه های allpathes ذخیره می شود.

کد بالا یک لیست پیوندی ایجاد میکنه به نام path بعد در هربار اجرای حلقه به لیست پیوندی عنصری با مقدار q اضافه میشه
در انتها هم خانه ی q ام AllPathes با لیست پیوندی شما مقداردهی میشه.
مشکل شما اینه که تمام خانه های AllPathes رو دارید با لیست پیوندی path مقداردهی میکنید.
Path آدرس خانه اول لیست پیوندی شماست و در تمام حلقه مقدار ثابتی داره.
اگر میخواهید مقادیر رو در خانه های Allpathes قرار دهید چه نیازی است که لیست پیوندی Path استفاده کنید ؟
اگر ممکنه توضیح بدید دقیقاً میخواهید چه کاری انجام بدهید.

Yama12
چهارشنبه 27 اسفند 1393, 19:52 عصر
این بخشی از کد اصلی هست
مشکل من در خط 140 هست.
مثلا خروجی بصورت زیر خواهد بود
allpathes[0]=23456
allpathes[1]=23456
allpathes[2]=23456

در صورتی که مقدار آخرین path=23456 بوده است

reza_noei
چهارشنبه 27 اسفند 1393, 20:47 عصر
اگر بعد از خط 38 کد زیر رو وارد کنید مشکلتون حل میشه.


Path = new LinkedList<int>();

در هر مرحله یک Path جدید ایجاد میکنه و در نهایت تمام Pathها در AllPathes قرار میگیرند.
اگه ممکنه توضیحاتی راجع به برنامتون بدید به نظرم جالب اومد.

Yama12
پنج شنبه 28 اسفند 1393, 00:59 صبح
اگر بعد از خط 38 کد زیر رو وارد کنید مشکلتون حل میشه.


Path = new LinkedList<int>();

در هر مرحله یک Path جدید ایجاد میکنه و در نهایت تمام Pathها در AllPathes قرار میگیرند.
اگه ممکنه توضیحاتی راجع به برنامتون بدید به نظرم جالب اومد.

سپاس از راهنمایی. درست شد.
قسمتی از حل مسئله فروشنده دوره گرد هست

Yama12
یک شنبه 09 فروردین 1394, 12:51 عصر
سلام مرسی بابت جواب قبلی
من در ادامه همون برنامه به مشکل مشابهی برخوردم
در کد زیر مقدار path را در خط 33 به newRout می دهم. اما از این به بعد زمانی که newRout تغییر می کند path نیز مثل newRout تغییر میکند!!



NotPath=new LinkedList<int>();// include Wi
newRout = new LinkedList<int>();// include Vi
LinkedListNode<int> newNode;
for (int k = 0; k < ObjVertex.Count; k++)
{
if (ObjVertex[k].Occupation == false)
{ NotPath.AddLast(k); }
}
double value=0;
double bestvalue = 0;
int bestBavlueIndex = 0;
bool Flag = false;// this flag determine whethere we have found new Sw for exchange or not

for (int i = 1; i < Path.Count-1; i++)
{
bestvalue = ObjVertex[NotPath.ElementAt<int>(0)].Score - ObjVertex[Path.ElementAt<int>(i)].Score;//best value=sw(0)-sv(i)
Flag = false;

for (int j = 0; j < NotPath.Count; j++)
{
value = ObjVertex[NotPath.ElementAt<int>(j)].Score - ObjVertex[Path.ElementAt<int>(i)].Score; //value= Sw-Sv

if (value > 0 && value > bestvalue)
{
bestvalue = value;
bestBavlueIndex = j;// index of Sw which has the best value
Flag = true;
}
}// of for j
if (Flag == true)// if we have found a Sw with Value > bestvalue
{
//check the total Time of path befor exchange
newRout = Path;//#######################
newNode = newRout.Find(newRout.ElementAt<int>(i));// V vertex from path to be exchanged with W from notpath
newRout.AddAfter(newNode, NotPath.ElementAt<int>(bestBavlueIndex));//adding the W after V
newRout.Remove(newNode);// removing V
if (CalculateTotalTime(newRout) < TMAX)
{
// changing the Occupation property for W and V befor exchange
ObjVertex[Path.ElementAt<int>(i)].Occupation = false;// changing V(i)
ObjVertex[NotPath.ElementAt<int>(bestBavlueIndex)].Occupation = true;// changing w(bestvalue)
//exchanging the V and W in main Path
// Path = newRout;//####################

}
}
else
{

}


}// of for i