Runtime Error (ACCESS_VIOLATION)是什么错误啊?求大神帮助啊!
淡定的小Y 2012-09-03 09:41:48 hdoj1107
#include<iostream>
using namespace std;
int a[13][13][1000],ma[3],jilu,n;
struct fun
{
char name;
int x,y;
int neili,wuyi,shengmingli;
int direction;//0的话为最还是得方向
}t[1000];
int fun1(int i)//参数为t结构体的下标
{
float q;
q=(0.5*t[i].neili+0.5*t[i].wuyi)*(t[i].shengmingli+10)*1.0/100;
return static_cast<int>(q);
}
int fun2(int i)
{
float q;
q=(0.8*t[i].neili+0.2*t[i].wuyi)*(t[i].shengmingli+10)*1.0/100;
return static_cast<int>(q);
}
int fun3(int i)
{
float q;
q=(0.2*t[i].neili+0.2*t[i].wuyi)*(t[i].shengmingli+10)*1.0/100;
return static_cast<int>(q);
}
void zhandou()
{ for(int i=1;i<=12;i++)
{
for(int j=1;j<=12;j++)
{
if((a[i][j][0]==2)&&(t[a[i][j][1]].name!=t[a[i][j][2]].name)&&t[a[i][j][1]].shengmingli>0&&t[a[i][j][2]].shengmingli>0)//判断是两个人并且是是不同派的
{
for(int k=1;k<=2;k++)
{
if(t[a[i][j][k]].name=='S')//分别算出攻击力
ma[k]=fun1(a[i][j][k]);//返回的是攻击力
if(t[a[i][j][k]].name=='W')
ma[k]=fun2(a[i][j][k]);
if(t[a[i][j][k]].name=='E')
ma[k]=fun3(a[i][j][k]);
}
t[a[i][j][1]].shengmingli-=ma[2];//算出战斗后的生命力的
t[a[i][j][2]].shengmingli-=ma[1];
}
}
}
}
void funs(int i)
{
int m;
m=t[i].x;
if(t[i].direction==0)//判读向下走
{
if(t[i].x<12)
{
a[t[i].x][t[i].y][0]--;
t[i].x++;
a[t[i].x][t[i].y][0]++;
}
else
{
t[i].direction=1;
a[t[i].x][t[i].y][0]--;
t[i].x--;
a[t[i].x][t[i].y][0]++;
}
}
else
{
if(t[i].x>1)
{
a[t[i].x][t[i].y][0]--;
t[i].x--;
a[t[i].x][t[i].y][0]++;
}
else
{
t[i].direction=0;
a[t[i].x][t[i].y][0]--;
t[i].x++;
a[t[i].x][t[i].y][0]++;
}
}
int k=1;
int w=1;
while(a[t[i].x][t[i].y][w]!=0)
w++;
while(a[m][t[i].y][k]!=0)
{
a[t[i].x][t[i].y][w]=a[m][t[i].y][k];
a[m][t[i].y][k]=0;
k++;
w++;
}
}
void funw(int i)
{
int m=t[i].y;
if(t[i].direction==0)
{
if(t[i].y<12)
{
a[t[i].x][t[i].y][0]--;
t[i].y++;
a[t[i].x][t[i].y][0]++;
}
else
{
t[i].direction=1;
a[t[i].x][t[i].y][0]--;
t[i].y--;
a[t[i].x][t[i].y][0]++;
}
}
else
{
if(t[i].y>1)
{
a[t[i].x][t[i].y][0]--;
t[i].y--;
a[t[i].x][t[i].y][0]++;
}
else
{
t[i].direction=0;
a[t[i].x][t[i].y][0]--;
t[i].y++;
a[t[i].x][t[i].y][0]++;
}
}
int k=1;
int w=1;
while(a[t[i].x][t[i].y][w]!=0)
w++;
while(a[t[i].x][m][k]!=0)
{
a[t[i].x][t[i].y][w]=a[t[i].x][m][k];
a[t[i].x][m][k]=0;
k++;
w++;
}
}
void fune(int i)
{
int m1=t[i].x,m2=t[i].y;
if(t[i].direction==0)
{
if((t[i].x<12)&&(t[i].y)<12)
{
a[t[i].x][t[i].y][0]--;
t[i].x++;
t[i].y++;
a[t[i].x][t[i].y][0]++;
}
else if((t[i].x>1)&&(t[i].y>1))
{
t[i].direction=1;
a[t[i].x][t[i].y][0]--;
t[i].x--;
t[i].y--;
a[t[i].x][t[i].y][0]++;
}
}
else
{
if((t[i].x>1)&&(t[i].y>1))
{
a[t[i].x][t[i].y][0]--;
t[i].x--;
t[i].y--;
a[t[i].x][t[i].y][0]++;
}
else if((t[i].x<12)&&(t[i].y)<12)
{
t[i].direction=0;
a[t[i].x][t[i].y][0]--;
t[i].x++;
t[i].y++;
a[t[i].x][t[i].y][0]++;
}
}
int k=1;
int w=1;
while(a[t[i].x][t[i].y][w]!=0)
w++;
while(a[m1][m2][k]!=0)
{
a[t[i].x][t[i].y][w]=a[m1][m2][k];
a[m1][m2][k]=0;
k++;
w++;
}
}
int main()
{
int T;
cin>>T;
while(T--)
{
jilu=0;//记录t结构体的下标
cin>>n;
memset(a,0,sizeof(a));
int i=1;
while(cin>>t[i].name)//对数据进行输入
{
if(t[i].name=='0')
break;
jilu++;//记录人数的
cin>>t[i].x>>t[i].y>>t[i].neili>>t[i].wuyi>>t[i].shengmingli;
a[t[i].x][t[i].y][0]++;//记录所在的坐标
t[i].direction=0;//记录方向
int k=1;//记录本人的信息是在某个坐标记录的
while(a[t[i].x][t[i].y][k]!=0)
k++;
a[t[i].x][t[i].y][k]=i;
i++;
}
for(int l=1;l<=n;l++)//每次走一步的
{
zhandou();//将战斗进行一次
for(i=1;i<=jilu;i++)//分别让他们走路的
{
if(t[i].shengmingli<=0)
continue;
if(t[i].name=='S')//提供的是结构体的下标
funs(i);//走路的函数
if(t[i].name=='W')
funw(i);
if(t[i].name=='E')
fune(i);
}
}
int max1=0,max2=0,max3=0,max4=0,max5=0,max6=0;
for(i=1;i<=jilu;i++)
{
if(t[i].name=='S'&&t[i].shengmingli>0)
{
max1++;
max2+=t[i].shengmingli;
continue;
}
if(t[i].name=='W'&&t[i].shengmingli>0)
{
max3++;
max4+=t[i].shengmingli;
continue;
}
if(t[i].name=='E'&&t[i].shengmingli>0)
{
max5++;
max6+=t[i].shengmingli;
continue;
}
}
cout<<max1<<" "<<max2<<endl;
cout<<max3<<" "<<max4<<endl;
cout<<max5<<" "<<max6<<endl;
cout<<"***"<<endl;
}
return 0;
}