Повна роздільність(SVG-файл, номінально 600 × 600 пікселів, розмір файлу: 17 КБ)

Wikimedia Commons logo Відомості про цей файл містяться на Вікісховищі — централізованому сховищі вільних файлів мультимедіа для використання у проектах Фонду Вікімедіа.

Опис файлу

Опис
English: Example of Vertex Critical Graph: on the left-top the original vc08-chi06 with chromatic number=6, next all the N-1 subgraphs with chromatic number= 5
Час створення
Джерело Власна робота
Автор Claudio Rocchini

Thanks

Many thanks to Gordon Royles [1] for the graph example.

Source Code

Dirty C++ generating code:

/* (C)2013 Claudio Rocchini CC-BY 3.0 */
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <vector>
#include <algorithm>
const double PI = 3.1415926535897932384626433832795;
typedef std::pair<int,int> edge;

int greedy_color( int N, const std::vector<edge> & edges, std::vector<int> & colors ) {
	std::vector< std::vector<int> > stars(N);
	std::vector<edge>::const_iterator ii;
	for(ii=edges.begin();ii!=edges.end();++ii) {
		stars[(*ii).first ].push_back( (*ii).second );
		stars[(*ii).second].push_back( (*ii).first  );
	}
	colors.resize(N);
	for(int nc=2;;++nc) {
		std::fill(colors.begin(),colors.end(),-1); colors[0] = 0;
		int p = 1;
		for(;;) {
			if(++colors[p]==nc) {
				colors[p] = -1;
				if(--p<1) break; else continue;
			}
			std::vector<int>::const_iterator jj;
			for(jj=stars[p].begin();jj!=stars[p].end();++jj)
				if(colors[*jj]==colors[p])  break;
			if(jj==stars[p].end()) if(++p==N) break;
		}
		if(p==N) return nc;
	}
}

int main() {
	const int S = 600;	
	const int rgb[][3] = {
		{255,8,8},{8,255,8},{8,8,255},{255,255,8},{255,8,255},{255,255,255}
	};
	/* Than's to for this graph:
	http://school.maths.uwa.edu.au/~gordon/remote/graphs/ */
	const int N = 8;
	const int pe[N] = {0,2,4,1,3,5,6,7};
	const int gr[N][7]= {
		{2,3,5,6,7,-1,-1}, {3,4,5,6,7,-1,-1}, {0,4,5,6,7,-1,-1},
		{0,1,5,6,7,-1,-1}, {1,2,5,6,7,-1,-1},
		{0,1,2,3,4,6,7}, {0,1,2,3,4,5,7}, {0,1,2,3,4,5,6}
	};
	int i,j,k;
	const double R1=S/7, R2=R1*2/3, R3=8;
	double x[N],y[N];
	for(i=0;i<5;++i) {
		x[pe[i]] = +sin(2*PI*i/5)*R1;
		y[pe[i]] = -cos(2*PI*i/5)*R1;
	}
	for(i=0;i<3;++i) {
		x[i+5] = +sin(2*PI*i/3)*R2;
		y[i+5] = -cos(2*PI*i/3)*R2;
	}
	
	FILE * fo = fopen("critical.svg","w");
	fprintf(fo,
		"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
		"<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.0\" width=\"%d\" height=\"%d\" id=\"criticalg\">\n"
		,S,S
	);
	
	for(k=-1;k<N;++k) {
		double lx = S/6+((k+1)%3)*S/3; double ly = S/6+((k+1)/3)*S/3;
		std::vector<edge> edges;
		for(i=0;i<N;++i) if(i!=k)
			for(j=0;j<7;++j)
				if(gr[i][j]>i && gr[i][j]!=k)
					edges.push_back( edge(i,gr[i][j]) );
		std::vector<int> colors;
		int nc = greedy_color(N,edges,colors);
		printf("colors = %d\n",nc);
	
		fprintf(fo,"<g style=\"stroke:#000000;stroke-width:1.5;fill:none\">\n");
		for(i=0;i<int(edges.size());++i)
		if(edges[i].first!=k && edges[i].second!=k)
			fprintf(fo,"<line x1=\"%6.2f\" y1=\"%6.2f\" x2=\"%6.2f\" y2=\"%6.2f\"/>\n"
				,lx+x[edges[i].first ],ly+y[edges[i].first]
				,lx+x[edges[i].second],ly+y[edges[i].second]
			);
		fprintf(fo,"</g>\n");

		fprintf(fo,"<g>\n");
		for(i=0;i<N;++i) if(i!=k)
			fprintf(fo,"<circle cx=\"%6.2f\" cy=\"%6.2f\" r=\"%g\" "
			           "style=\"stroke:#000000;stroke-width:1;stroke-opacity:1.0;fill:#%02X%02X%02X\"/>\n"
				,lx+x[i],ly+y[i],R3
				,rgb[colors[i]][0],rgb[colors[i]][1],rgb[colors[i]][2]
			);
		fprintf(fo,"</g>\n");
	}
	
	fprintf(fo,"</svg>\n");
	
	fclose(fo);
	
	
	return 0;
}

Ліцензування

Я, власник авторських прав на цей твір, добровільно публікую його на умовах такої ліцензії:
w:uk:Creative Commons
зазначення авторства поширення на тих же умовах
Цей файл ліцензований на умовах Creative Commons Attribution-Share Alike 3.0 Unported
Ви можете вільно:
  • ділитися – копіювати, поширювати і передавати твір
  • модифікувати – переробляти твір
При дотриманні таких умов:
  • зазначення авторства – Ви повинні вказати авторство, надати посилання на ліцензію і вказати, чи якісь зміни було внесено до оригінального твору. Ви можете зробити це в будь-який розсудливий спосіб, але так, щоб він жодним чином не натякав на те, наче ліцензіар підтримує Вас чи Ваш спосіб використання твору.
  • поширення на тих же умовах – Якщо ви змінюєте, перетворюєте або створюєте іншу похідну роботу на основі цього твору, ви можете поширювати отриманий у результаті твір тільки на умовах такої ж або сумісної ліцензії.

Підписи

Додайте однорядкове пояснення, що саме репрезентує цей файл

Об'єкти, показані на цьому файлі

зображує

17 089 байт

600 піксель

600 піксель

Історія файлу

Клацніть на дату/час, щоб переглянути, як тоді виглядав файл.

Дата/часМініатюраРозмір об'єктаКористувачКоментар
поточний11:52, 4 червня 2013Мініатюра для версії від 11:52, 4 червня 2013600 × 600 (17 КБ)RocchiniUser created page with UploadWizard

Така сторінка використовує цей файл:

Глобальне використання файлу

Цей файл використовують такі інші вікі:

Метадані