الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

هل توجد مكتبة او كلاس لي the graphs

بدأه sahraoui dhelim في 31 أكتوبر 2011 · 10 رد · 787 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

هذه الايام ادرس مادة graph theory في الجامعة

و استعمل الجافا في الدروس التطبيقية

فهل يوجد مكتبة او كلاس في الجافا لي رسم و تمثيل graoh

#2

السلام عليكم ....

http://jung.sourceforge.net

http://www.jgrapht.org

1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#3

بارك الله فيك اخي

لقد حملت المكتبة و اضفتها الى netbeans عن طريق tool->library و حددت مسارها و تمت اضافتها

و عندما افتح مشروع و اضيفها الى مكتبات المشروع , عندما اعمل import لي اي class, ال netbeans لا يتعرف على المكتبة

حاولت البحث عن دروس او شرح لي هذه المكتبة لكن لم اجد

من عنده فكرة عن موضوع JGraphT فليفدنا افادكم الله.

اريد فقط الاساسيات و إن شاء الله سافهم الباقى

#4

السلام عليكم ..

  1. حمَل الملف jgrapht-0.8.2.zip من الموقع http://www.jgrapht.org أو من الرابط المباشر هنا (أحيانا لا يعمل او يغير).
  2. افتح الملف jgrapht-0.8.2.zip (هو ليس المكتبة) و ستجد داخله المكتبة المسماة jgrapht-jdk1.6.jar .. استخرجها و اضفها إلى المشروع ..

لدينا أمران :

أولا : تمثيل الغراف representation :

أي يتم تمثيل البيان في الذاكرة .. المكتبة تزودنا بعدة أنواع من الغرافات ..SimpleDirectedGraph و SimpleDirectedWeightedGraph و SimpleWeightedGraph و SimpleGraph

و هذا مثال عن أبسط أنواعها و هو الــ SimpleGraph و هو صف مشتق من الصف UndirectedGraph .. (انتبه لهرمية الصفوف ) :

كيف نعرف غراف :

-------------------------------------------------------------------------------

UndirectedGraph<String, DefaultEdge> g =  new SimpleGraph<String, DefaultEdge>(DefaultEdge.class);

حيث هنا نوع العقد هو String .. (يمكنك إضافة أي صف كعقدة) ....و نوع الحواف (Edges) هو DefaultEdge (ربما هناك أنواع أخرى)..

ملاحظة :

يمكنك كتابته بالشكل :

 SimpleGraph<String, DefaultEdge> g = new SimpleGraph<String, DefaultEdge>(DefaultEdge.class);

فلا مشكلة ... حسب الــ OOP ... (هكذا ورد بالمثال)

----------------------------------------------------------------------------

 
String v1 = "v1";
    	String v2 = "v2";
    	String v3 = "v3";
    	String v4 = "v4";

    	// add the vertices
    	g.addVertex(v1);
    	g.addVertex(v2);
    	g.addVertex(v3);
    	g.addVertex(v4);

هنا تم إضافة العقد من نوع String لأان الغراف تم تعريفه أن عقده من نوع String

----------------------------------------------------------------------------------------------------

 // add edges to create a circuit
    	g.addEdge(v1, v2);
    	g.addEdge(v2, v3);
    	g.addEdge(v3, v4);
    	g.addEdge(v4, v1);

هنا تم إضافة الحواف Edges (ماذا كان اسمها بالعربي؟؟) ..بين العقد ..

------------------------------------------------------------------------------------

System.out.println(g.toString());

طباعة الغراف ..

------------------------------------------------------------------------------------

المثال كاملا :

package myPackage;
import javax.swing.JFrame;
import org.jgrapht.UndirectedGraph;
import org.jgrapht.graph.DefaultEdge;
import org.jgrapht.graph.SimpleGraph;


public class FrmMain  extends JFrame
{
	public static void main(String[] args)
	{
    	UndirectedGraph<String, DefaultEdge> g =
        	new SimpleGraph<String, DefaultEdge>(DefaultEdge.class);

    	String v1 = "v1";
    	String v2 = "v2";
    	String v3 = "v3";
    	String v4 = "v4";

    	// add the vertices
    	g.addVertex(v1);
    	g.addVertex(v2);
    	g.addVertex(v3);
    	g.addVertex(v4);

    	// add edges to create a circuit
    	g.addEdge(v1, v2);
    	g.addEdge(v2, v3);
    	g.addEdge(v3, v4);
    	g.addEdge(v4, v1);

    	System.out.println(g.toString());

	}

}

ثانيا : رسم الغراف visualization :

رسم الغراف على Applet .أو ..أي كائن قابل للرسم عليه ...و هنا مثال بالسورس كود :

http://www.jgrapht.o...alizations.html

ملاحظة :

لو أردت أرفع لك البروجكت ...(Netbeans 6.8) ...

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 31 أكتوبر 2011 في 22:05

3

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#5

استفسار, ما المقصود بـ رسم و تمثيل graph هل مثال ذلك الـ pie chart, line chart, and bar chart ؟

ام ان المقصد غير ذلك؟

إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً         فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ


 


 


رسم المخططات البيانية بواسطة الجافا


 


كتاب تحليل وتصميم نظم المعلومات


#6

السلام عليكم

لا ليس المقصود هو رسم البيانات

the graph theory هو احدى العلوم الرياضية المستعملة بكثرة في الاعلام الالى , و له عدة تطبيقات اهمها في الشبكات , و به يصنع المترجمات ...

راجع هذه المقالة الرابط الخاص بي

#7

بارك الله فيك اخي

thaaaaaaanks a lot

المكتبة تعمل , و الكود شغال , استطيع انشاء اي graphe اريده شكرا

لكنى اواجه مشاكل في الرسم

سوالي هو : هل من الضروري تحميل مكتبة JGraph لكي استطيع الرسم , ام JGraphT فقط.

لاني demo الذي اعطيتني ايه يستعمل JGraph

تقبل تحياتى

houssam11350_11350 كتب:

السلام عليكم ..

  1. حمَل الملف jgrapht-0.8.2.zip من الموقع http://www.jgrapht.org أو من الرابط المباشر هنا (أحيانا لا يعمل او يغير).
  2. افتح الملف jgrapht-0.8.2.zip (هو ليس المكتبة) و ستجد داخله المكتبة المسماة jgrapht-jdk1.6.jar .. استخرجها و اضفها إلى المشروع ..

لدينا أمران :

أولا : تمثيل الغراف representation :

أي يتم تمثيل البيان في الذاكرة .. المكتبة تزودنا بعدة أنواع من الغرافات ..SimpleDirectedGraph و SimpleDirectedWeightedGraph و SimpleWeightedGraph و SimpleGraph

و هذا مثال عن أبسط أنواعها و هو الــ SimpleGraph و هو صف مشتق من الصف UndirectedGraph .. (انتبه لهرمية الصفوف ) :

كيف نعرف غراف :

-------------------------------------------------------------------------------

UndirectedGraph<String, DefaultEdge> g =  new SimpleGraph<String, DefaultEdge>(DefaultEdge.class);

حيث هنا نوع العقد هو String .. (يمكنك إضافة أي صف كعقدة) ....و نوع الحواف (Edges) هو DefaultEdge (ربما هناك أنواع أخرى)..

ملاحظة :

يمكنك كتابته بالشكل :

 SimpleGraph<String, DefaultEdge> g = new SimpleGraph<String, DefaultEdge>(DefaultEdge.class);

فلا مشكلة ... حسب الــ OOP ... (هكذا ورد بالمثال)

----------------------------------------------------------------------------

 
String v1 = "v1";
    	String v2 = "v2";
    	String v3 = "v3";
    	String v4 = "v4";

    	// add the vertices
    	g.addVertex(v1);
    	g.addVertex(v2);
    	g.addVertex(v3);
    	g.addVertex(v4);

هنا تم إضافة العقد من نوع String لأان الغراف تم تعريفه أن عقده من نوع String

----------------------------------------------------------------------------------------------------

 // add edges to create a circuit
    	g.addEdge(v1, v2);
    	g.addEdge(v2, v3);
    	g.addEdge(v3, v4);
    	g.addEdge(v4, v1);

هنا تم إضافة الحواف Edges (ماذا كان اسمها بالعربي؟؟) ..بين العقد ..

------------------------------------------------------------------------------------

System.out.println(g.toString());

طباعة الغراف ..

------------------------------------------------------------------------------------

المثال كاملا :

package myPackage;
import javax.swing.JFrame;
import org.jgrapht.UndirectedGraph;
import org.jgrapht.graph.DefaultEdge;
import org.jgrapht.graph.SimpleGraph;


public class FrmMain  extends JFrame
{
	public static void main(String[] args)
	{
    	UndirectedGraph<String, DefaultEdge> g =
        	new SimpleGraph<String, DefaultEdge>(DefaultEdge.class);

    	String v1 = "v1";
    	String v2 = "v2";
    	String v3 = "v3";
    	String v4 = "v4";

    	// add the vertices
    	g.addVertex(v1);
    	g.addVertex(v2);
    	g.addVertex(v3);
    	g.addVertex(v4);

    	// add edges to create a circuit
    	g.addEdge(v1, v2);
    	g.addEdge(v2, v3);
    	g.addEdge(v3, v4);
    	g.addEdge(v4, v1);

    	System.out.println(g.toString());

	}

}

ثانيا : رسم الغراف visualization :

رسم الغراف على Applet .أو ..أي كائن قابل للرسم عليه ...و هنا مثال بالسورس كود :

http://www.jgrapht.o...alizations.html

ملاحظة :

لو أردت أرفع لك البروجكت ...(Netbeans 6.8) ...

بارك الله فيك اخي

thaaaaaaanks a lot

المكتبة تعمل , و الكود شغال , استطيع انشاء اي graphe اريده شكرا

لكنى اواجه مشاكل في الرسم

سوالي هو : هل من الضروري تحميل مكتبة JGraph لكي استطيع الرسم , ام JGraphT فقط.

لاني demo الذي اعطيتني ايه يستعمل JGraph

تقبل تحياتى

و يا حبذا ان تعطيني مثال مرسوم .

تم تعديل هذه المشاركة بواسطة sahraoui17 في 1 نوفمبر 2011 في 09:06

#8

السلام عليكم ..

اقتباس
لاني demo الذي اعطيتني ايه يستعمل JGraph

نعم ..صحيح ..لم انتبه للموضوع ...

و أيضا يوجد عندك الــ jgraphx ... اطلع عليه ...يمكنها رسم الغراف على الفورم ..(لكن للأسف العقد تكون مربعة ... و يمكنك الأستفادة من الأكواد التالية)

http://downloads.jgr...rchive/?C=M;O=D

package myPackage;

import java.util.Random;

public class MyVertex
{

	public String VertexValue = "";
	public Object VisualVetex = null;
	public int X = 0;
	public int Y = 0;
	public int Width = 0;
	public int Height = 0;

	public MyVertex(String VertexValue)
	{
    	Random random = new Random();
    	this.VertexValue = VertexValue;

    	this.X = random.nextInt(400);
    	this.Y = random.nextInt(400);
    	this.Width = 10 + random.nextInt(20);
    	this.Height = 10 +  random.nextInt(20);


	}

	public MyVertex(String VertexValue, int X, int Y, int Width, int Height)
	{
    	this.VertexValue = VertexValue;
    	this.X = X;
    	this.Y = Y;
    	this.Width = Width;
    	this.Height = Height;
	}
}

package myPackage;

import org.jgrapht.graph.DefaultEdge;

public class MyEdge extends DefaultEdge
{

	public MyVertex getMyVertexSource()
	{
    	return (MyVertex)super.getSource();
	}
 	public MyVertex getMyVertexTarget()
	{
    	return (MyVertex)super.getTarget();
	}

}

package myPackage;

import com.mxgraph.swing.mxGraphComponent;
import com.mxgraph.view.mxGraph;
import javax.swing.JFrame;
import org.jgrapht.UndirectedGraph;
import org.jgrapht.graph.SimpleGraph;

public class FrmMain extends JFrame
{

	UndirectedGraph<MyVertex, MyEdge> g;

	public FrmMain()
	{
    	buildGraph();
    	drawGraph();
	}

	public void buildGraph()
	{
    	g = new SimpleGraph<MyVertex, MyEdge>(MyEdge.class);

    	MyVertex v1 = new MyVertex("v1" , 10 , 10 , 20 , 20);
    	MyVertex v2 = new MyVertex("v2");
    	MyVertex v3 = new MyVertex("v3" , 400,400, 30 , 30);
    	MyVertex v4 = new MyVertex("v4");

    	// add the vertices
    	g.addVertex(v1);
    	g.addVertex(v2);
    	g.addVertex(v3);
    	g.addVertex(v4);

    	// add edges to create a circuit
    	g.addEdge(v1, v2);
    	g.addEdge(v2, v3);
    	g.addEdge(v3, v4);
    	g.addEdge(v4, v1);

    	System.out.println(g.toString());

	}

	public void drawGraph()
	{

    	mxGraph graph = new mxGraph();
    	Object parent = graph.getDefaultParent();

    	graph.getModel().beginUpdate();
    	try
    	{

        	for (MyVertex myVertex : g.vertexSet())
        	{
            	myVertex.VisualVetex = graph.insertVertex(parent, null, myVertex.VertexValue, myVertex.X , myVertex.Y, myVertex.Width,myVertex.Height);
        	}

        	for (MyEdge myEdge : g.edgeSet())
        	{
            	graph.insertEdge(parent, null, "Edge", myEdge.getMyVertexSource().VisualVetex , myEdge.getMyVertexTarget().VisualVetex);

        	}


    	} finally
    	{
        	graph.getModel().endUpdate();
    	}

    	mxGraphComponent graphComponent = new mxGraphComponent(graph);
    	getContentPane().add(graphComponent);


	}

	public static void main(String[] args)
	{
    	FrmMain frame = new FrmMain();
    	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	frame.setSize(400, 320);
    	frame.setVisible(true);
	}
}

ملاحظة :

عليك قراءة التوثيق الكامل لأي مكتبة تريد استخدامها ..

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 1 نوفمبر 2011 في 16:57

2

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#9

السلام عليكم

شكرا اخي و بارك الله فيك

و جعلك الله دائما في خدمة المسلمين

الكود يعمل , و لقد فهمته و ساعدل عليه

houssam11350_11350 كتب:

ملاحظة :

عليك قراءة التوثيق الكامل لأي مكتبة تريد استخدامها ..

لماذا يجب قراءة التوثيق

هل الامر يتعلق بي الحقوق

لانه لا توجد متبعات قضائية في الوطن العربي فلماذا اقراه

#10

السلام عليكم ...

اقتباس

لماذا يجب قراءة التوثيق

هل الامر يتعلق بي الحقوق

أقصد بالتوثيق هو الــ Documentation .. أي شرح المكتبة و الصفوف الموجودة فيها و طريقة استخدامها و الــ API التي تزودنا به ...

أما موضوع الحقوق فهو ضمن اتفاقية الترخيص License ..

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#11
houssam11350_11350 كتب:

أقصد بالتوثيق هو الــ Documentation .. أي شرح المكتبة و الصفوف الموجودة فيها و طريقة استخدامها و الــ API التي تزودنا به ..

شكرا

مواضيع مشابهة