高价收购完全验证四色问题的源代码,谢谢!!! (300分)

  • 主题发起人 主题发起人 隐儿
  • 开始时间 开始时间
这要找数学好的人来做,据说最先是由两位外国数学家,
通过计算机验证了这个猜想,具体怎么做不知道哦。。。。。
 
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <graphics.h>
#define S 50
int proved;
int menu(void);
int input(int Matrix);
FILE *LoadSaveMenu(char *wr) ;
void save(int Matrix,int s);
int load(int Matrix);
int prove(int Matrix,int Dis[],int s);
void print(int Dis[],int s);
void Exit();
/*创建二维数组Matrix[][]表示关联矩阵,一维数组Dis[]表示国家颜色,以switch调用各个函数进行证明和操作*/
void main()
{
int Matrix;
/* 存放关联矩阵 */
int Dis;
/* 存放每个国家对应的颜色 */
int s;
/* 区域数目 */
int c;
FILE *fp;
int gdriver=DETECT,gmode;
initgraph(&amp;gdriver,&amp;gmode," ");
clrscr();cleardevice();
while(1)
{
clrscr();cleardevice();
c=menu();
clrscr();cleardevice();
switch(c)
{
case 1: s=input(Matrix);
break;
case 2: save(Matrix,s);
break;
case 3: s=load(Matrix);
break;
case 4: proved=prove(Matrix,Dis,s);
break;
case 5: print(Dis,s);
break;
case 6: Exit();
break;
default: break;
}
printf("/n/tPress any key to main menu.....");
getch();
}
}
/*图形主菜单,按上下键选择功能,返回所选项给main */
int menu(void)
{
int gdriver=DETECT,gmode;
char *name[]={"Input relatived districts","Save the record","Load the record","Try to prove","Print the provement","Exit todo
S"};
int i,c=' ',a=0;
clrscr();cleardevice();
initgraph(&amp;gdriver,&amp;gmode," ");
setbkcolor(0);
settextstyle(1,0,5);
setcolor(14);
outtextxy(200,60,"Menu");
settextstyle(3,0,3);
while(1)
{
for(i=0;i<6;i++)
{
if(i==a)
{ setcolor(5);
outtextxy(150,30*(i+4),name);
i++;
setcolor(15);
}
if(i>5) break;
outtextxy(150,30*(i+4),name);
}
c=getch();
switch(c)
{
case 72: a--;
break;
case 80: a++;
break;
default: break;
}
if(a<0) a++;
if(a>5) a--;
if(a==0&amp;&amp;c==13)break;
if(a==1&amp;&amp;c==13)break;
if(a==2&amp;&amp;c==13)break;
if(a==3&amp;&amp;c==13)break;
if(a==4&amp;&amp;c==13)break;
if(a==5&amp;&amp;c==13)break;
}
return(a+1);
}

/*输入函数, 要求定义区域的数目,输入相关联的每两个区域,返回区域数目*/
int input(int Matrix)
{
int i,j,s;
printf("/n/tPlease input how much district you want: ");
/* 定义区域的数目 */
scanf("%d",&amp;s);
s++;
for(i=1;i<s;i++)
for(j=1;j<s;j++)
{
if(i!=j) Matrix[j]=0;
if(i==j) Matrix[j]=1;
}
do
{ clrscr();cleardevice();
printf("/n/tdistrict: ");
/* 输入相关联的两个区域 */
scanf("%d",&amp;i);
printf("/tand district : ");
scanf("%d",&amp;j);
Matrix[j]=Matrix[j]=1;
printf("/tEnter 'q' to out ,others to continue....../n");
}while(getch()!='q');
proved=0;
/* 没证明前proved为0 */
return(s);
}

/*按 save 或 load 传来的 wb 或rb 对所选文件进行读或写操作,返回文件指针fp */
FILE *LoadSaveMenu(char *wr)
{
FILE * fp;
char c,solas[25];
printf("/n/tPlease input the recordlist you want to select:");
/* 选择读取或存入的文件 */
printf("/n/t[1]China map [2]World map [3]save/load as :");
c=getch();
printf("%c/n",c);
switch(c)
{
case '1' : fp=fopen("China.txt",wr);
break;
case '2' : fp=fopen("World.txt",wr);
break;
case '3' : printf("/n/tPlease input your file name: ");
scanf("%s",solas);
fp=fopen(solas,wr);
break;
default : break;
}
return fp;
}

/*把现在的Matrix矩阵存入到Loadsavemenu返回的fp指向的文件中*/
void save(int Matrix,int s)
{
int i,j;
FILE * fp;
fp=LoadSaveMenu("wb");
fputc(s,fp);
/* 存入区域个数 */
for(i=1;i<s;i++)
for(j=1;j<s;j++)
fwrite(&amp;Matrix[j],sizeof(int),1,fp);
/* 存入矩阵 */
fclose(fp);
}

/*在Loadsavemenu 返回的fp中读出已记录的矩阵*/
int load(int Matrix)
{
int i,j,s;
FILE * fp;
fp=LoadSaveMenu("rb");
clrscr();cleardevice();
printf("/n/tThe matrix is as follow:/n");
s=fgetc(fp);
for(i=1;i<s;i++)
{
if(i%17==0) {printf("/n/n/tPress any key to continue..");
getch();
clrscr();cleardevice();}
printf("/n/t/t");
for(j=1;j<s;j++)
{
fread(&amp;Matrix[j],sizeof(int),1,fp);
printf("%d",Matrix[j]);
}
}
fclose(fp);
proved=0;
return(s);
}

/* 主要的证明部分,详细步骤见流程图 */
int prove(int Matrix,int Dis[],int s)
{
int i,j,k;
int Color[5];
/* 用于判断第1,2,3,4种颜色是否用过 */
Dis[1]=1;
/* 第一个区域即Dis[1]填上1号颜色 */
i=2;
/* i表示区域序号,i=2即第二个区域 */
while(i<s)
{
k=1;
/* k表示颜色序号,k=1为第一号颜色 */
while(1)
{
for(j=1;j<=4;j++) Color[j]=0;
/* 储存颜色的数组Color清0 */
j=1;
while(j<=i-1)
{ if(Matrix[j]==1) Color[Dis[j]]=-1;
/*判断Matrix[j]是否关联,关联则登记这号颜色用过 */
j++;}
while(k<=4)
{ if(Color[k]==0) goto loop;
k++;} /* 判断k号颜色是否用过 */
i=i-1;
/* 若颜色已用尽,则退回到前一个区域改变颜色 */
k=Dis+1;
/* 退到前一个区域,使其当前颜色号加1 */
}
loop:Dis=k;
/* 把第k种颜色给第i个区域 */
i=i++;
}
printf("/n/tThe matrix have proved successfully !!!");
proved=1;
printf("%d",proved);
}

/*由全局变量proved决定是否已经通过证明,当且仅当证明后才可打印出来*/
void print(int Dis[],int s)
{
int i,j;
if(proved==1)
{
printf("/n/tThe color schemes is:/n");
for(i=1;i<s;i++)
{if(i%17==0) {getch();clrscr();cleardevice();}
printf("/n/tdestrict %-2d draw ",i);
switch(Dis)
{
case 1: printf("orange");
/* 设1号颜色对应橙色,类推 */
break;
case 2: printf("pink");
break;
case 3: printf("blue");
break;
case 4: printf("yellow");
break;
}
}
}
else
{
printf("/n/tThis matrix haven't proved,Go to prove frist !!!");
/* 未调用prove函数去证明时不可打印 */
return;
}
}
/*安全退出本程序*/
void Exit()
{
char c;
printf("/n/tDo you really want to return todo
S?(y/n)");
c=getch();
if(c=='y'||c=='Y') exit(0);
else
return;
}
 
1.需求分析
问题描述:
证明了可以用不多于4种颜色对n个区域着色,而满足相邻的区域具有不同的颜色
输入形式 :
暂定最多50个区域,如需证明更多区域,修改#define S 50 即可;
以整形形式输入(取值范围1-32767)用户需要证明的区域数目,相联的一对矩阵;
输出形式:
以0和1输出关联矩阵,和以blue yellow orange pink形式输出每个区域相对应证明出的颜色;
 
int menu(void)
//图形主菜单,按上下键选择功能,返回所选项给main
int input(int Matrix)
//输入函数, 要求定义区域的数目,输入相关联的每两个区域,返回区域数目
FILE *LoadSaveMenu(char *wr)
//按 save 或 load 传来的 wb 或rb 对所选文件进行读或写操作,返回文件指针fp
void save(int Matrix,int s)
//把现在的Matrix矩阵存入到Loadsavemenu返回的fp指向的文件中
int load(int Matrix)
//在Loadsavemenu 返回的fp中读出已记录的矩阵
int prove(int Matrix,int Dis[],int s)
//主要的证明部分,详细步骤见流程图
void print(int Dis[],int s);
//由全局变量proved决定是否已经通过证明,当且仅当证明后才可打印出来
void Exit()
//安全退出本程序
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=633687 看这里
 
有delphi的代码吗?
谢谢!
 
http://noi.stinfo.net/qwy/qwy.htm 这里有。。。。。
 
  人人都熟悉地图,可是绘制一张普通的政区图,至少需要几种颜色,才能把相邻的政区或区域通过不同的颜色区分开来,就未必是一个简单的问题了。
  这个地图着色问题,是一个著名的数学难题。大家不妨用一张中国政区图来试一试,无论从哪里开始着色,至少都要用上四种颜色,才能把所有省份都区别开来。所以,很早的时候就有数学家猜想:“任何地图的着色,只需四种颜色就足够了。”这就是“四色问题”这个名称的由来。
  数学史上正式提出“四色问题”的时间是在1852年。当时伦敦的大学的一名学生法朗西斯向他的老师、著名数学家、伦敦大学数学教授莫根提出了这个问题,可是莫根无法解答,求助于其它数学家,也没有得到答案。于是从那时起,这个问题便成为数学界的一个“悬案”。
  一直到二十年前的1976年9月,《美国数学会通告》正式宣布了一件震撼全球数学界的消息:美国伊利诺斯大学的两位教授阿贝尔和哈根,利用电子计算机证明了“四色问题”这个猜想是完全正确的!他们将普通地图的四色问题转化为2000个特殊图的四色问题,然后在电子计算机上计算了足足1200个小时,最后成功地证明了四色问题。
 
怎么验证一个图,你应该知道了吧?关键是掌握算法思想,什么语言不重要。
如果要完全验证,可能就是要验证那‘2000个特殊图’了,嘿嘿,祝你好运!
 
http://www.data118.net
大家好,现在注册创业联盟黄金会员,就送注册版的checkpoint大型网络安全防火墙(全球著名)和ORACLE817数据库给大家学习使用!
CheckPoint FireWall网络安全防火墙
作为开放安全企业互联联盟(OPSEC)的组织和倡导者之一,CheckPoint公司致力于企业级网络安全产品的研发,据IDC的最近统计,其FireWall防火墙在市场占有率上已超过44%,《财富》排名前100的大企业里近80%选用了CheckPoint FireWall防火墙。
 
在给出的多种配色方案中能有算法选择最好的配色方案吗?
谢谢!
 
这个东西我不熟悉哦,你说的最佳。。。,指什么?
 
一个数学难题。
 
后退
顶部