求热心好手帮忙修改C语言代码,是关于退火算法的

求热心高手帮忙修改C语言代码,是关于退火算法的!
我是在一道作业题,好不容易做出来了,但是代码有点问题!求帮忙呀。。。
题目:
在一个直径为100km的圆内,随机均匀分布着200个通信基站,基站信号能覆盖的范围22km内的圆形区域。为避免信号干扰,相邻基间频道不能相同。为保证正常通信,给每个基站分配一个信道,使得整个网络内的基站使用的频道数量最少。
代码如下:
C/C++ code
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

#define N 200//200个通信基站

int ping[N];//用数字来表示不同的频率
int discard[N];//表示用频率i的个数,discard[i]表示频率利用频率i的基站数目
int x[N],y[N];//200个点的坐标
int lei=N;//记录一共用了的频率类型

void create()//初始化每个点的频率
{
    int i;
    //生成可行解
    for(i=0;i<N;i++)
    {
        ping[i]=i;
        discard[i]=1;//表示这个频率是要用的
    }
}

void init_location()
{
    srand(time(0));
    //圆以(0,0)为中心
    int k=0;
    while(k<N)
    {
        int a=rand()%200;
        int b=rand()%200;
        if(a*a+b*b<10000)//表示在圆内
        {
            x[k]=a;
            y[k++]=b;
            if((k+1)%10==0)    printf("\n");
//            printf("(%d,%d)    ",a,b);
        }
    }
}
int kexing(int a,int b)//将a点的频率变成b后是否是可行解
{
    int flag=1;
    for(int i=0;i<N;i++)
    {
        if(i==a)
            continue;
        int dis;
        dis=pow(x[i]-x[a],2)+pow(y[i]-y[a],2);
        if(dis>22*22)
            continue;
        if(ping[i]==ping[b])
        {
            flag=0;
            return flag;
        }
    }
    return flag;
}
void tuihuo()
{
    double T=10,afa=0.99,e=pow(0.1,30);
    int M=2000000;
//    printf("\n%d",pow(2,4));
    int k=0;//迭代次数
    srand(time(0));
    while(k<M&&T>e)
    {

        //生成新方案
        int a=rand()%N;
        int b=rand()%N;//第a个点的频率变成b
        if(!kexing(a,b))
            continue;
        //生成了可行解,如果把a原先的频率废弃掉,看看能否减少频率种类


        if(discard[ping[a]]==1&&discard[b]!=0)//如果a原先的频率只有一个基站使用,b频率有人使用
        //将a的频率换成b时,减少了频率的种类
        {
            lei--;
            discard[ping[a]]--;
            discard[b]++;//使用b频率的增加一个
            ping[a]=b;
        }
        else
        {
            int c=rand();
            double detaf;
            if(discard[ping[a]]>1&&discard[b]==0)//a原先的频率有很多基站使用,b频率没有使用,改变后增加频率种类
            {
                detaf=-1;
                lei++;
            }
            else
                detaf=0;//其他情况都是没有改变种类
            //现在按概率接受解决方法
            if(exp(-detaf/T)>c)//按概率接受新方法
            {
                discard[ping[a]]--;
                discard[b]++;
                ping[a]=b;
            }
        }


        T=T*afa;
    }
    for(int i=0;i<N;i++)
    {
        if(i%10==0)
            printf("\n");
        printf("%d  ",ping[i],discard[ping[i]]);
    }
}

void main()
{


    create();
    init_location();
    tuihuo();
    printf("\n");
    printf("\n\n一共用频率    %d    种!\n\n",lei);
}


------解决方案--------------------
地图着色问题?
------解决方案--------------------
这样的成熟算法,最好现成的已经反复验证过的。