#include stdlib.h
我们提供的服务有:成都做网站、成都网站建设、成都外贸网站建设、微信公众号开发、网站优化、网站认证、平乐ssl等。为上1000家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的平乐网站制作公司
#include math.h
#include stdio.h
int brinv(double a[], int n)
{ int *is,*js,i,j,k,l,u,v;
double d,p;
is=malloc(n*sizeof(int));
js=malloc(n*sizeof(int));
for (k=0; k=n-1; k++)
{ d=0.0;
for (i=k; i=n-1; i++)
for (j=k; j=n-1; j++)
{ l=i*n+j; p=fabs(a[l]);
if (pd) { d=p; is[k]=i; js[k]=j;}
}
if (d+1.0==1.0)
{ free(is); free(js); printf("err**not inv\n");
return(0);
}
if (is[k]!=k)
for (j=0; j=n-1; j++)
{ u=k*n+j; v=is[k]*n+j;
p=a[u]; a[u]=a[v]; a[v]=p;
}
if (js[k]!=k)
for (i=0; i=n-1; i++)
{ u=i*n+k; v=i*n+js[k];
p=a[u]; a[u]=a[v]; a[v]=p;
}
l=k*n+k;
a[l]=1.0/a[l];
for (j=0; j=n-1; j++)
if (j!=k)
{ u=k*n+j; a[u]=a[u]*a[l];}
for (i=0; i=n-1; i++)
if (i!=k)
for (j=0; j=n-1; j++)
if (j!=k)
{ u=i*n+j;
a[u]=a[u]-a[i*n+k]*a[k*n+j];
}
for (i=0; i=n-1; i++)
if (i!=k)
{ u=i*n+k; a[u]=-a[u]*a[l];}
}
for (k=n-1; k=0; k--)
{ if (js[k]!=k)
for (j=0; j=n-1; j++)
{ u=k*n+j; v=js[k]*n+j;
p=a[u]; a[u]=a[v]; a[v]=p;
}
if (is[k]!=k)
for (i=0; i=n-1; i++)
{ u=i*n+k; v=i*n+is[k];
p=a[u]; a[u]=a[v]; a[v]=p;
}
}
free(is); free(js);
return(1);
}
void brmul(double a[], double b[],int m,int n,int k,double c[])
{ int i,j,l,u;
for (i=0; i=m-1; i++)
for (j=0; j=k-1; j++)
{ u=i*k+j; c[u]=0.0;
for (l=0; l=n-1; l++)
c[u]=c[u]+a[i*n+l]*b[l*k+j];
}
return;
}
int main()
{ int i,j;
static double a[4][4]={ {0.2368,0.2471,0.2568,1.2671},
{1.1161,0.1254,0.1397,0.1490},
{0.1582,1.1675,0.1768,0.1871},
{0.1968,0.2071,1.2168,0.2271}};
static double b[4][4],c[4][4];
for (i=0; i=3; i++)
for (j=0; j=3; j++)
b[i][j]=a[i][j];
i=brinv(a,4);
if (i!=0)
{ printf("MAT A IS:\n");
for (i=0; i=3; i++)
{ for (j=0; j=3; j++)
printf("%13.7e ",b[i][j]);
printf("\n");
}
printf("\n");
printf("MAT A- IS:\n");
for (i=0; i=3; i++)
{ for (j=0; j=3; j++)
printf("%13.7e ",a[i][j]);
printf("\n");
}
printf("\n");
printf("MAT AA- IS:\n");
brmul(b,a,4,4,4,c);
for (i=0; i=3; i++)
{ for (j=0; j=3; j++)
printf("%13.7e ",c[i][j]);
printf("\n");
}
}
}
用一个队列来实现。。。
首先把所有初始状态入队。。。然后把队首元素出队。。执行你需要进行的操作。。同时把出队的元素所派生出来的符合你题目要求的状态入队。。
一直不停的循环。。下面我给你个非常简单的例子:
Problem:求能被n整出的,求只有0和1构成的正十进制整数是多少(输入:一个数N。当N=0是代表输入结束。。。
源代码如下:
#inlcude "stdio.h"
#include "string.h"
typedef struct QUEUE//建立一个队列
{
int queue[1000];
int top;//尾
int low;//头
}ST;
void main()
{
ST Queue;
int n;
while(scanf("%d",n)n)//当N为0是代表输入结束
{
memset(Queue,0,sizeof(Queue));//队列清零(memset()包含在string.h头文件中)
Queue.queue[Queue.top=Queue.low=0]=1;//从一开始搜索
Queue.top++;
while(Queue.lowQueue.top)//当队列不为空时,继续循环
{
int s=Queue.queue[Queue.low++];//出队列
if(!(s%n))
{
printf("%d\n",s);
break;
}
else //如果没找到。。后面的数入队列
{
Queue.queue[Queue.top++]=10*s;
Queue.queue[Queue.top++]=10*s+1;
}
}
}
}
这是一个很简单也会一个很典型的广度优先搜索。。。
因为这只是给你介绍一个概念。。所有就举了最简单的例子。。。
广度优先其实很复杂。。还有各种优化。。。
先有个这样的概念你以后在去学吧。。至于上面一个人的回答。你可以直接无视。。
他说的是关于广度优先比价复杂的(虽然原理是一样的)。。
改说的我都说了。。
给我分啊
我要分 。。。
G.arcs[i][j]其实就是一个邻接矩阵中的一个数,INFINITY是无穷的意思,大概意思就是定义顶点i到j是不连通的,所以度当然为NULL了。
书上算法实现的问题,你只要有C语言基础,然后注意每个C语言的结构体需要定义,还有就是书上的算法只是一个函数,不是主函数,主函数需要自己写,而且,书上给的函数中它调用了前面所讲的的函数,所以最好从前面开始写代码。
就线性表那你章,你要把结构体写到程序代码中去,然后要在主函数中定义它,最好从简单的开始,如初始化链表,然后create建立链表,还有写程序时要注意有些算法中的宏定义是没有给出的,需要自己定义。
PS:要实现书上的算法要学会自己调试程序,自己看着哪里错误,然后去修改,一步一步来,就能行的,相信自己
你这是
参数传递
进去的其实是数组的地址,在函数内部修改了以后,数组的内容就已经真正的修改了,所以函数返回以后,继续访问这个数组,得到的数据就是修改以后的。
比如:
int array[12][12];
copy_arcs(arrar)
在访问array就是修改后的数据了