子函数怎么返回多个值
sky?? 2016-05-27 01:03:47 五子棋。输入一个19*19的矩阵,只包含数字0、1、2,表示两人下五子棋的棋牌状态,1、2分别表示两人的棋子,0表示空格。要求判断当前状态下是否有人获胜(横向、竖向或者斜线方向连成5个同色棋子)。题目说明输入样例保证每条线上至多只有连续5个同色棋子,并且保证至多只有1人获胜。如果有人获胜,输出获胜者(1或2)加一个冒号,接着输出获胜的五连珠的第一个棋子的坐标,从上到下从左到右序号最小的为第一个,序号从1开始编号。如果无人获胜,输出no。
我的问题:子函数 无法返回坐标
#include<stdio.h>
void main()
{
int panduan(int p[19][19],int i,int j,int m);
int p[19][19]={0},i,j,num=0,flag=0;
while(1){
num++;
scanf("%d%d",&i,&j);
if(p[i][j]==0)
p[i][j]=1;
else{
printf("重新输入\n");
scanf("%d%d",&i,&j);
p[i][j]=1;}
flag=panduan(p,i,j,1);
if(flag==1){
printf("1\n");
num=0;
for(i=0;i<19;i++)
for(j=0;j<19;j++)
p[i][j]=0;
break;
}
else printf("no\n");
if(num==181){
printf("no\n");
break;}
scanf("%d%d",&i,&j);
if(p[i][j]==0)
p[i][j]=2;
else{
printf("重新输入\n");
scanf("%d%d",&i,&j);
p[i][j]=2;}
flag=panduan(p,i,j,2);
if(flag==1){
printf("2\n");
num=0;
for(i=0;i<19;i++)
for(j=0;j<19;j++)
p[i][j]=0;
break;
}
else printf("no\n");
}
}
int panduan(int p[19][19],int i,int j,int m)
{
int o,n,num=1;
for(o=i+1;o<=19&&(p[o][j]==m);o++)
num++;
if(num>=5)
return(1);
else
for(o=i-1;o>=0&&(p[o][j]==m);o--)
num++;
if(num>=5)
return(1);
for(num=1,n=j+1;n<=19&&(p[i][n]==m);n++)
num++;
if(num>=5)
return(1);
else
for(o=j-1;n>=0&&(p[i][n]==m);n--)
num++;
if(num>=5)
return(1);
for(num=1,o=i-1,n=j-1;o>=0&&n>=0&&(p[o][n]==m);o--,n--)
num++;
if(num>=5)
return(1);
else for(o=i+1,n=j+1;o<=19&&n<=19&&(p[o][n]==m);o++,n++)
num++;
if(num>=5)
return(1);
for(num=1,o=i-1,n=j+1;o>=0&&n<=19&&(p[o][n]==m);o--,n++)
num++;
if(num>=5)
return(1);
else for(o=i+1,n=j-1;o<=19&&n>=0&&(p[o][n]==m);o++,n--)
num++;
if(num>=5)
return(1);
return(0);
}