天哪终于A了泥泞地,刚开始模板return错了后来数组又类型开错了。。。

#include<cstdio>
#include<vector>
#include<iostream>
using namespace std;
int t;
char ch[155][155];
int a[155][155],b[155][155];//不要顺手
int link[30005];
int vis[30005];
vector<int>e[30005];
int find(int x)
{
    for(int i=0;i<e[x].size();i++)
    {
        int y=e[x][i];
        if(vis[y]!=t)
        {
            vis[y]=t;
            if(link[y]==0||find(link[y]))
            {
                link[y]=x;
                return 1;
            }
        }
    } 
    return 0;//here不要手误
}
int main()
{
    int r,c;
    int cnt=1;
    scanf("%d%d",&r,&c);
    for(int i=1;i<=r;i++)
    {
        for(int j=1;j<=c;j++)
        {
            cin>>ch[i][j];
        }
    }
    for(int i=1;i<=r;i++)
    {
        for(int j=1;j<=c;j++)
        {
            if(ch[i][j]=='.')
            {
                if(ch[i][j-1]=='*')cnt++;
                a[i][j]=0;
            }
            else
            if(ch[i][j]=='*')
            {
                a[i][j]=cnt;
            }
        }
        if(ch[i][c]=='*')cnt++;
    }
    int maxn=cnt;
    cnt=1;
    for(int i=1;i<=c;i++)
    {
        for(int j=1;j<=r;j++)
        {
            if(ch[j][i]=='.')
            {
                if(ch[j-1][i]=='*')cnt++;
                b[j][i]=0;
            }
            else
            if(ch[j][i]=='*')
            {
                b[j][i]=cnt;
            }
        }
        if(ch[r][i]=='*')cnt++;
    }
    for(int i=1;i<=r;i++)
    {
        for(int j=1;j<=c;j++)
        {
            if(a[i][j]==0)continue;
            e[a[i][j]].push_back(b[i][j]);
        }
    }
    int ans=0;
    for(int i=1;i<=maxn;i++)
    {
        t++;
        if(find(i))
        {
            ans++;
        }
    }
    printf("%d\n",ans);
    return 0;
}