السلام عليكم ,,,
اخواني الاعزاء ...
كما هو وضاح من العنوان ,, هل ممكن ان تساعدوني في برمجة خوارزمية breadth first باستخدام كود ms sql ???
,ولكم جزيل الشكر
السلام عليكم ,,,
اخواني الاعزاء ...
كما هو وضاح من العنوان ,, هل ممكن ان تساعدوني في برمجة خوارزمية breadth first باستخدام كود ms sql ???
,ولكم جزيل الشكر
الافضل كتابتها بال C# او دمج ال CLR مع ال MS SQL لانه باستخدام ال T-SQL وحدها لن يمكنك
Technical Lead Developer
اللهم قنى شر الجهل و الجهلاء
( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}
اخي وجدت كود أعتقد انه يفي بالغرض ...
في الكود التالي افترض وجود جدول تخزن فيه النودز للجراف المراد البحث فيه واسمه vertices يتكون من عمودين فقط aid,bid من نوع int
CREATE PROCEDURE [dbo].[BFS]( @FROM INT, @TO INT ) AS BEGIN DECLARE @Nodes TABLE (Generation INT, p INT, r INT, UNIQUE(p, r)) DECLARE @Generation INT SELECT @Generation = 0 INSERT @Nodes ( Generation, p ) SELECT @Generation, @FROM WHILE @@ROWCOUNT > 0 AND NOT EXISTS (SELECT * FROM @Nodes WHERE p = @TO) BEGIN SELECT @Generation = @Generation + 1 INSERT @Nodes ( Generation, p, r ) SELECT @Generation, bid, aid FROM vertices WHERE aid IN (SELECT p FROM @Nodes WHERE Generation = @Generation - 1) AND bid NOT IN (SELECT p FROM @Nodes) UNION SELECT @Generation, aid, bid FROM vertices WHERE bid IN (SELECT p FROM @Nodes WHERE Generation = @Generation - 1) AND aid NOT IN (SELECT p FROM @Nodes) END -- Backtracing method: Traces the route back from target to start DECLARE @Backtrace TABLE ( p INT ) INSERT @Backtrace VALUES(@TO) WHILE @Generation > 0 BEGIN DELETE FROM @Nodes WHERE Generation = @Generation AND p NOT IN(SELECT p FROM @Backtrace) INSERT @Backtrace ( p ) SELECT DISTINCT r FROM @Nodes WHERE Generation = @Generation SELECT @Generation = @Generation - 1 END END SELECT * FROM @Nodes ORDER BY Generation, r, p
تم تعديل هذه المشاركة بواسطة adham enaya في 5 مايو 2010 في 22:52