图片描述语言GraphML,C语言通过双向循环链表消除Josephus

/*
 *use two-directioned looped linkedList
 */
#include <cstdio>
using namespace std ;
class node
{
public:
    node* last ;
    node* next ;
    int element ;
    node( )
    {
        last = next = NULL ;
        element = 0 ;
    }
    node( int element )
    {
         last = next = NULL ;
         this->element = element ;
    }
} ;
typedef node* node_pointer ;
//pick the list recommended out
void func( int n , int m , int s )
{
    //there is only one element in the list
    if( n == 1 )
    {
        printf( "1/n" ) ;
    }
    //there is only two element in the list
    else if( n == 2 )
    {
        if( m & 1 )
        {
            printf( "%d %d/n" , s , 3 - s ) ;
        }
        else
        {
            printf( "%d %d/n" , 3 - s , s ) ;
        }
    }
    else
    {
        //size:the size of the list
        //cnt:the counter to find the start pointer
        int size = n , cnt = 1 ;
        node_pointer head = new node( 1 ) ;//the first node pointer built
        node_pointer current = head , start_pointer ; //start_pointer:the start pointer
        if( s == 1 )
        {
            start_pointer = current ;
        }
        for( int i = 2 ; i <= size ; i ++ )
        {
            node_pointer tmp = new node( i ) ;
            current->next = tmp ;
            tmp->last = current ;
            current = tmp ;
            if( ++ cnt == s )
            {
                start_pointer = current ;
            }
        }
        current->next = head ;
        head->last = current ;

        current = start_pointer ;
        cnt = 1 ;
        //the loop to pick the list out
        while( true )
        {
            if( cnt == m )
            {
                if( size  >= 3 )
                {
                    printf( "%d " , current->element ) ;
                    node_pointer tmp1 = current->last ;
                    node_pointer tmp2 = current->next ;
                    tmp1->next = tmp2 ;
                    tmp2->last = tmp1 ;

                    delete current ;
                    current = tmp2 ;
                    cnt = 1 ;

                    size -- ;
                }
                else if( size == 2 )
                {
                    printf( "%d " , current->element ) ;
                    node_pointer tmp = current->next ;
                    tmp->last = tmp->next = tmp ;

                    delete current ;
                    current = tmp ;
                    cnt = 1 ;

                    size -- ;
                }
                else if( size == 1 )
                {
                    printf( "%d/n" , current->element ) ;
                    delete current ;
                    break ; //over
                }
            }
            else
            {
                current = current->next ;
                cnt ++ ;
            }
        }
    }
}
int main()
{
    int n , m , s ;//n:the total number , m:every m is picked , s:the start
    while( scanf( "%d%d%d" , &n , &m , &s ) == 3 )
    {
        func( n , m , s ) ;
    }
    return 0 ;
}

                                给出几组样例:

复杂的图片恐怕包蕴嵌套,超边或注册点,这么些GraphML也提供了内建的扶助。

GraphML用于定义图形(graph),对于上边的一个大约图形,

可认为GraphML增欧元数据(meta-data),以便于对Graph的深入分析。GraphML通过在要素上扩张品质表明来定义图形的元数据。包蕴两类源数据,分别表示元素的数码新闻和文件格式消息。

10 5 3

嵌套图( Nested Graph )

澳门葡京备用网址 1

可增添的本性如下:

7 2 8 4 1 10 3 6 9 5

图片描述语言GraphML,C语言通过双向循环链表消除Josephus。嵌套图表现为图形的子成分本人也说不定为图。比方:

用GraphML描述为:

 

2 23 2 2 1

 

澳门葡京备用网址 2<?xml version=”1.0″ encoding=”UTF-8″?>
澳门葡京备用网址 3<graphml xmlns=””  
澳门葡京备用网址 4    xmlns:xsi=””
澳门葡京备用网址 5    xsi:schemaLocation=”
澳门葡京备用网址 6     ;
澳门葡京备用网址 7  <graph id=”G” edgedefault=”undirected”>
澳门葡京备用网址 8    <node id=”n0″/>
澳门葡京备用网址 9    <node id=”n1″/>
澳门葡京备用网址 10    <node id=”n2″/>
澳门葡京备用网址 11    <node id=”n3″/>
澳门葡京备用网址 12    <node id=”n4″/>
澳门葡京备用网址 13    <node id=”n5″/>
澳门葡京备用网址 14    <node id=”n6″/>
澳门葡京备用网址 15    <node id=”n7″/>
澳门葡京备用网址 16    <node id=”n8″/>
澳门葡京备用网址 17    <node id=”n9″/>
澳门葡京备用网址 18    <node id=”n10″/>
澳门葡京备用网址 19    <edge source=”n0″ target=”n2″/>
澳门葡京备用网址 20    <edge source=”n1″ target=”n2″/>
澳门葡京备用网址 21    <edge source=”n2″ target=”n3″/>
澳门葡京备用网址 22    <edge source=”n3″ target=”n5″/>
澳门葡京备用网址 23    <edge source=”n3″ target=”n4″/>
澳门葡京备用网址 24    <edge source=”n4″ target=”n6″/>
澳门葡京备用网址 25    <edge source=”n6″ target=”n5″/>
澳门葡京备用网址 26    <edge source=”n5″ target=”n7″/>
澳门葡京备用网址 27    <edge source=”n6″ target=”n8″/>
澳门葡京备用网址 28    <edge source=”n8″ target=”n7″/>
澳门葡京备用网址 29    <edge source=”n8″ target=”n9″/>
澳门葡京备用网址 30    <edge source=”n8″ target=”n10″/>
澳门葡京备用网址 31  </graph>
澳门葡京备用网址 32</graphml>

适用元素

1 1 1

澳门葡京备用网址 33

 

属性名称

1

用GraphML表示如下:

 能够看到,GraphML中有关图形的片段基本概念如下:
澳门葡京备用网址 34

含义

注:此程序暗中认可输入合理。即n > 0 , m > 0 , 1 <= s <= n。

 

需求注意以下几点:

graph(数量消息)

澳门葡京备用网址 35<?xml version=”1.0″ encoding=”UTF-8″?>
澳门葡京备用网址 36<graphml xmlns=””  xmlns:xsi=””
澳门葡京备用网址 37xsi:schemaLocation=” ;
澳门葡京备用网址 38  <graph id=”G” edgedefault=”undirected”>
澳门葡京备用网址 39    <node id=”n0″/>
澳门葡京备用网址 40    <node id=”n1″/>
澳门葡京备用网址 41    <node id=”n2″/>
澳门葡京备用网址 42    <node id=”n3″/>
澳门葡京备用网址 43    <node id=”n4″/>
澳门葡京备用网址 44    <node id=”n5″>
澳门葡京备用网址 45        <graph id=”n5:” edgedefault=”undirected”>
澳门葡京备用网址 46          <node id=”n5::n0″/>
澳门葡京备用网址 47          <node id=”n5::n1″/>
澳门葡京备用网址 48          <node id=”n5::n2″/>
澳门葡京备用网址 49          <edge id=”e0″ source=”n5::n0″ target=”n5::n2″/>
澳门葡京备用网址 50          <edge id=”e1″ source=”n5::n1″ target=”n5::n2″/>
澳门葡京备用网址 51        </graph>
澳门葡京备用网址 52    </node>
澳门葡京备用网址 53    <node id=”n6″>
澳门葡京备用网址 54        <graph id=”n6:” edgedefault=”undirected”>
澳门葡京备用网址 55          <node id=”n6::n0″>
澳门葡京备用网址 56              <graph id=”n6::n0:” edgedefault=”undirected”>
澳门葡京备用网址 57                <node id=”n6::n0::n0″/>
澳门葡京备用网址 58               </graph>
澳门葡京备用网址 59          </node>
澳门葡京备用网址 60          <node id=”n6::n1″/>
澳门葡京备用网址 61          <node id=”n6::n2″/>
澳门葡京备用网址 62          <edge id=”e10″ source=”n6::n1″ target=”n6::n0::n0″/>
澳门葡京备用网址 63          <edge id=”e11″ source=”n6::n1″ target=”n6::n2″/>
澳门葡京备用网址 64        </graph>
澳门葡京备用网址 65    </node>
澳门葡京备用网址 66    <edge id=”e2″ source=”n5::n2″ target=”n0″/>
澳门葡京备用网址 67    <edge id=”e3″ source=”n0″ target=”n2″/>
澳门葡京备用网址 68    <edge id=”e4″ source=”n0″ target=”n1″/>
澳门葡京备用网址 69    <edge id=”e5″ source=”n1″ target=”n3″/>
澳门葡京备用网址 70    <edge id=”e6″ source=”n3″ target=”n2″/>
澳门葡京备用网址 71    <edge id=”e7″ source=”n2″ target=”n4″/>
澳门葡京备用网址 72    <edge id=”e8″ source=”n3″ target=”n6::n1″/>
澳门葡京备用网址 73    <edge id=”e9″ source=”n6::n1″ target=”n4″/>
澳门葡京备用网址 74  </graph>
澳门葡京备用网址 75</graphml>

1.Graph中的成分(element)未有各类供给

parse.nodes

里头,假诺边连接的是node中子图内的node,则适用::表示node的层级。如source=”n6::n1″

如,上面包车型客车Graph是合情合理的:

图中节点的数额

 

澳门葡京备用网址 76  <graph id=”G” edgedefault=”directed”>
澳门葡京备用网址 77    <node id=”n0″/>
澳门葡京备用网址 78    <edge source=”n0″ target=”n2″/>
澳门葡京备用网址 79    <node id=”n1″/>
澳门葡京备用网址 80    <node id=”n2″/>
澳门葡京备用网址 81  </graph>

parse.edges

超边( Hyperedges )

2.有向图和无向图可以勾兑定义。

图中边的数码

超边是指接连到四个node的边,如图:

Graph中必须指定edgedefault

parse.maxindegree

澳门葡京备用网址 82

属性

图中节点的最大“入度”

在GraphML中用成分

(

parse.maxoutdegree

hyperedge表示超边,其子成分为八个endpoint,各种endpoint指向二个node:

图中节点的最大“出度”

 

directed”

node``(数量信息)

澳门葡京备用网址 83<?xml version=”1.0″ encoding=”UTF-8″?>
澳门葡京备用网址 84<graphml xmlns=””  xmlns:xsi=””
澳门葡京备用网址 85xsi:schemaLocation=” ;
澳门葡京备用网址 86  <graph id=”G” edgedefault=”undirected”>
澳门葡京备用网址 87    <node id=”n0″/>
澳门葡京备用网址 88    <node id=”n1″/>
澳门葡京备用网址 89    <node id=”n2″/>
澳门葡京备用网址 90    <node id=”n3″/>
澳门葡京备用网址 91    <node id=”n4″/>
澳门葡京备用网址 92    <node id=”n5″/>
澳门葡京备用网址 93    <node id=”n6″/>
澳门葡京备用网址 94    <hyperedge>
澳门葡京备用网址 95       <endpoint node=”n0″/>
澳门葡京备用网址 96       <endpoint node=”n1″/>
澳门葡京备用网址 97       <endpoint node=”n2″/>
澳门葡京备用网址 98     </hyperedge>
澳门葡京备用网址 99    <hyperedge>
澳门葡京备用网址 100       <endpoint node=”n3″/>
澳门葡京备用网址 101       <endpoint node=”n4″/>
澳门葡京备用网址 102       <endpoint node=”n5″/>
澳门葡京备用网址 103       <endpoint node=”n6″/>
澳门葡京备用网址 104     </hyperedge>
澳门葡京备用网址 105    <hyperedge>
澳门葡京备用网址 106       <endpoint node=”n1″/>
澳门葡京备用网址 107       <endpoint node=”n3″/>
澳门葡京备用网址 108澳门葡京备用网址 ,     </hyperedge>
澳门葡京备用网址 109    <edge source=”n0″ target=”n4″/>
澳门葡京备用网址 110  </graph>
澳门葡京备用网址 111</graphml>

或“

parse.indegree

 

undirected”)

节点的“入度”

 

parse.outdegree

注册点(port)

Edge

节点的“出度”

注册点指边或超边连接受node上的逻辑地方。叁个node能够有八个注册点,用port子元素定义:

中也可以单独设置

Graph (格式信息)

澳门葡京备用网址 112<?xml version=”1.0″ encoding=”UTF-8″?>
澳门葡京备用网址 113<graphml xmlns=””  xmlns:xsi=””
澳门葡京备用网址 114xsi:schemaLocation=” ;
澳门葡京备用网址 115  <graph id=”G” edgedefault=”directed”>
澳门葡京备用网址 116    <node id=”n0″>
澳门葡京备用网址 117      <port name=”North”/>
澳门葡京备用网址 118      <port name=”South”/>
澳门葡京备用网址 119      <port name=”East”/>
澳门葡京备用网址 120      <port name=”West”/>
澳门葡京备用网址 121    </node>
澳门葡京备用网址 122    <node id=”n1″>
澳门葡京备用网址 123      <port name=”North”/>
澳门葡京备用网址 124      <port name=”South”/>
澳门葡京备用网址 125      <port name=”East”/>
澳门葡京备用网址 126      <port name=”West”/>
澳门葡京备用网址 127    </node>
澳门葡京备用网址 128    <node id=”n2″>
澳门葡京备用网址 129      <port name=”NorthWest”/>
澳门葡京备用网址 130      <port name=”SouthEast”/>
澳门葡京备用网址 131    </node>
澳门葡京备用网址 132    <node id=”n3″>
澳门葡京备用网址 133      <port name=”NorthEast”/>
澳门葡京备用网址 134      <port name=”SouthWest”/>
澳门葡京备用网址 135    </node>
澳门葡京备用网址 136    <edge source=”n0″ target=”n3″ sourceport=”North” targetport=”NorthEast”/>
澳门葡京备用网址 137    <hyperedge>
澳门葡京备用网址 138       <endpoint node=”n0″ port=”North”/>
澳门葡京备用网址 139       <endpoint node=”n1″ port=”East”/>
澳门葡京备用网址 140       <endpoint node=”n2″ port=”SouthEast”/>
澳门葡京备用网址 141     </hyperedge>
澳门葡京备用网址 142  </graph>
澳门葡京备用网址 143</graphml>

directed

parse.nodeids

迄今,GraphML的定义如下图:
澳门葡京备用网址 144

如若值为”``canonical”,``则所有``node``的``id``格式必须为”``nx”``,其中``x``的大小表示``node``节点出现的顺序(``x``小的先出现)``;

true

如果值为”free”,则node的id属性能够自便安装。

parse.edgeids

false

与parse.nodeids类似,但边的格式化编码为”ex”

Parse.order

3.对于唯有八个端点(endpoint)的Edge(称为循环边loop edge,自循环selfloop edge,或反射边reflexive edig),是透过为edge的source 和 target 属性设置同一的值来定义的。

如果值为``nodesfirst``,则先定义所有的``node``元素再定义所有的``edge``元素;

 

如果值为 ``adjacencylist``,则在定义``edge``之后定义其相关的``node;

如果值为``free,``则没有限制。

增添了元数据的GraphML的例子如下:

澳门葡京备用网址 145<?xml version=”1.0″ encoding=”UTF-8″?>
澳门葡京备用网址 146<!– This file was written by the JAVA GraphML Library.–>
澳门葡京备用网址 147<graphml xmlns=””  
澳门葡京备用网址 148            xmlns:xsi=””
澳门葡京备用网址 149            xsi:schemaLocation=” 
澳门葡京备用网址 150                                ;
澳门葡京备用网址 151  <graph id=”G” edgedefault=”directed” 
澳门葡京备用网址 152            parse.nodes=”11″ parse.edges=”12″ 
澳门葡京备用网址 153            parse.maxindegree=”2″ parse.maxoutdegree=”3″
澳门葡京备用网址 154            parse.nodeids=”canonical” parse.edgeids=”free” 
澳门葡京备用网址 155            parse.order=”nodesfirst”>
澳门葡京备用网址 156    <node id=”n0″ parse.indegree=”0″ parse.outdegree=”1″/>
澳门葡京备用网址 157    <node id=”n1″ parse.indegree=”0″ parse.outdegree=”1″/>
澳门葡京备用网址 158    <node id=”n2″ parse.indegree=”2″ parse.outdegree=”1″/>
澳门葡京备用网址 159    <node id=”n3″ parse.indegree=”1″ parse.outdegree=”2″/>
澳门葡京备用网址 160    <node id=”n4″ parse.indegree=”1″ parse.outdegree=”1″/>
澳门葡京备用网址 161    <node id=”n5″ parse.indegree=”2″ parse.outdegree=”1″/>
澳门葡京备用网址 162    <node id=”n6″ parse.indegree=”1″ parse.outdegree=”2″/>
澳门葡京备用网址 163    <node id=”n7″ parse.indegree=”2″ parse.outdegree=”0″/>
澳门葡京备用网址 164    <node id=”n8″ parse.indegree=”1″ parse.outdegree=”3″/>
澳门葡京备用网址 165    <node id=”n9″ parse.indegree=”1″ parse.outdegree=”0″/>
澳门葡京备用网址 166    <node id=”n10″ parse.indegree=”1″ parse.outdegree=”0″/>
澳门葡京备用网址 167    <edge id=”edge0001″ source=”n0″ target=”n2″/>
澳门葡京备用网址 168    <edge id=”edge0002″ source=”n1″ target=”n2″/>
澳门葡京备用网址 169    <edge id=”edge0003″ source=”n2″ target=”n3″/>
澳门葡京备用网址 170    <edge id=”edge0004″ source=”n3″ target=”n5″/>
澳门葡京备用网址 171    <edge id=”edge0005″ source=”n3″ target=”n4″/>
澳门葡京备用网址 172    <edge id=”edge0006″ source=”n4″ target=”n6″/>
澳门葡京备用网址 173    <edge id=”edge0007″ source=”n6″ target=”n5″/>
澳门葡京备用网址 174    <edge id=”edge0008″ source=”n5″ target=”n7″/>
澳门葡京备用网址 175    <edge id=”edge0009″ source=”n6″ target=”n8″/>
澳门葡京备用网址 176    <edge id=”edge0010″ source=”n8″ target=”n7″/>
澳门葡京备用网址 177    <edge id=”edge0011″ source=”n8″ target=”n9″/>
澳门葡京备用网址 178    <edge id=”edge0012″ source=”n8″ target=”n10″/>
澳门葡京备用网址 179  </graph>
澳门葡京备用网址 180</graphml>

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website