题目网址:http://acm.pku.edu.cn/JudgeOnline/problem?id=1979
我的程序:
#include<string.h>
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define MAX_VERTEX_NUM 400
typedef int VertexType;
typedef char InfoType;
typedef struct ArcNode
{
int adjvex;
struct ArcNode *nextarc;
InfoType info;
}ArcNode;
typedef struct VNode
{
VertexType data;
ArcNode *firstarc;
}Vnode,AdjList[MAX_VERTEX_NUM];
typedef struct
{
AdjList vertices;
int vexnum;
}ALGraph;
typedef struct
{
int *elem;
int length;
}SqList;
int visited[MAX_VERTEX_NUM];
int ad = 0;
int NextAdjVex(ALGraph *G,VertexType v,VertexType w)
{
ArcNode *p;
p = G->vertices[v].firstarc;
while(p && p->adjvex != w)
p = p->nextarc;
if(!p || !p->nextarc)
return -1;
else
return p->nextarc->adjvex;
}
void DFS(ALGraph *G,int v)
{
int w;
visited[v] = 1;
ad++;
for(w = G->vertices[v].firstarc->adjvex; w >= 0;w = NextAdjVex(G,v,w = w))
if(!visited[w])
DFS(G,w);
}
int Contact(ALGraph *G,int v,int v0)
{
ArcNode *p0 = G->vertices[v0].firstarc;
if(v == v0)
return 1;
while(p0 && p0->adjvex != v)
p0 = p0->nextarc;
if(p0)
return 1;
else
return 0;
}
void Insert(ALGraph *G,int i,ArcNode node)
{
ArcNode *p;
ArcNode *q;
p = (ArcNode*)malloc(sizeof(ArcNode));
p->adjvex = node.adjvex;
p->info = node.info;
p->nextarc = NULL;
if(!G->vertices[i].firstarc)
G->vertices[i].firstarc = p;
else
{
q = G->vertices[i].firstarc;
while(q->nextarc)
q = q->nextarc;
q->nextarc = p;
}
}
void main()
{
int v = 0;
ALGraph *G;
SqList *L;
ArcNode p1[MAX_VERTEX_NUM];
int row1,row2;
int i,j;
L = (SqList*)malloc(sizeof(SqList));
G = (ALGraph*)malloc(sizeof(ALGraph));
L->elem = (int *)malloc(sizeof(int));
L->length = 1;
scanf("%d %d",&row1,&row2);
while(row1 != 0 && row2 != 0)
{
fflush(stdin);
G->vexnum = row1*row2;
for(i = 0; i < row2; i++)
{
for(j = 0; j < row1; j++)
{
scanf("%c",&p1[i*row1+j].info);
p1[i*row1+j].adjvex = i*row1+j;
p1[i*row1+j].nextarc = NULL;
if(p1[i*row1+j].info == '@')
v = i*row1+j;
if(p1[i*row1+j].info == '#')
visited[i*row1+j] = 1;
else
visited[i*row1+j] =0;
}
fflush(stdin);
}
for(i = 0; i < G->vexnum; i++)
{
G->vertices[i].data = i;
G->vertices[i].firstarc = NULL;
if(i%row1 != 0)
Insert(G,i,p1[i-1]);
if((i+1)%row1 != 0)
Insert(G,i,p1[i+1]);
if(i >=row1 )
Insert(G,i,p1[i-row1]);
if(i < G->vexnum-row1)
Insert(G,i,p1[i+row1]);
}
for(i = v; i < G->vexnum; i++)
if(!visited[i] && Contact(G,i,v))
DFS(G,i);
for(i = v-1; i >= 0; i--)
if(!visited[i] && Contact(G,i,v))
DFS(G,i);
L->elem[L->length-1] = ad;
L->elem = (int *)realloc(L->elem,(L->length+1)*sizeof(int));
L->length++;
ad = 0;
scanf("%d %d",&row1,&row2);
}
for(i = 0; i < L->length-1; i++)
printf("%d\n",L->elem[i]);
}
北大acm里的题,提交时为什么提示Time Limit Exceeded,该如何改(不改变...
下次再递归到这个点的时候直接退出
北大ACM题库1061题,我怎么老是Time Limit Exceeded?
用扩展欧几里德算法才行的,你的循环肯定是不行的,还有int范围必定溢出 请用 __int64
北大acm 1002 time limit exceeded http:\/\/acm.pku.edu.cn\/JudgeOnline...
1. 做ACM题目时,空间尽量用采用静态分配,比如定义为phone[1000][8],别用动态分配new,这个很耗时的,并且最后的delete也要花费时间。2. 对phone的赋值可以采用更高效的方法,分析一下赋值的规律,你可以这样:scanf("%c",&s);for(j=0;s!='\\n';j++){ if(s=='-'){ scanf("%c",&s...
为什么我的北大ACM1006题提交上去会是编译错误呢,以下是我的代码:#...
在第一个for 语句里面 你 int i;但是在for里面声明,那么i的有效范围 只能在这个for里面 但是你在 后面一个 for(int k=0;k<i;k++)又用到了 i 。。。所以编译错误 你把i 提出来。。,在外面声明 ,就不会Compile Error了
北大ACM第1006,我用C语言写的,调试时都是成功的为什么提交时出现Wro...
1. 两个For loop都从0开始 2. 两个For loop外面的if都删掉 3. 无需储存所有input以后再算,可以读一组算一组 include<stdio.h> include<iostream> int main(){ int p,e,i,d;int m=1,n=1,o,q=0,t=0,f=0;int arry[4],num=0;while(1){ scanf("%d %d %d %d",&p,&e,&i...
output limit exceeded
我学过VB 这种情况,应该与变量的定义有关。
北大ACM里的1047题目,求大神帮我看一下哪里出现了问题,怎么提交都有...
for(int i=0;i<len;i++){ if(b[i]==a[0]){ y=i;bl=1;break;} } 某种情况,输入的数是:1XXXXXX1XX 乘完以后是XX1XX1XXXX,但你只把b中第一个1和a[0]匹配,就判断它不是cycle,但其实它还可以和后面一个1匹配。
...还有就是看不懂里面的代码 需要怎样去学 谢谢!
3、尝试ACM竞赛题,ACM竞赛和OnLineJudge平台,比如 http:\/\/tyvj.cn\/ 类似有很多,北大、北邮这种大学都有类似的网站,上面不仅有题目,还有算法、有答案、有提示,还能直接在网页上做题。刷题可以获得及时反馈,一旦你AC了3道题,那种成就感可以让你继续下去,哈哈。不过除非你兴趣就是算法本身,那么刷30道题基本就可以了...